在里面返回一个承诺然后不起作用

returning a promise inside then doesn't work

我正在使用 bluebird 作为我的 Promise 库。我有以下链:

function a() {
  return Promise.all([promise1, promise2]).then((results) => {      
      return promise3(results)
  })
}

但我无法得到 promise3 的结果,我的意思是以下内容不起作用:

a().then((result) => {
    console.log(result)
}).catch((err) => {
    console.error(err)
})

我搜索并阅读了有关 promises 的内容,但我不明白问题出在哪里?

这可能有多种原因,无法从 post 中确定是哪一个。因此,为了帮助未来的读者 - 让我们找出在上述情况下可能出现的问题:

让我们对代码进行以下调整:

function a() {
  console.log("a called"); // if this doesn't log, you're redefining 'a'
  return Promise.all([promise1, promise2]).then((results) => {
      console.log("In .all"); // if this isn't called, promise1 or promise2 never resolve      
      return promise3(results);
  }).tap(() => 
    console.log("Promise 3 fn resolved") // if this doesn't log, promise3 never resolves
  });
}

然后,我们的 then 处理程序:

let r = a().then((result) => {
    console.log('result', result); // this logs together with promise 3 fn
}); // bluebird automatically adds a `.catch` handler and emits unhandledRejection

setTimeout(() => {
  // see what `r` is after 30 seconds, if it's pending the operation is stuck
  console.log("r is", r.inspect()); 
}, 30000);

这应该可以全面覆盖所有可能出错的情况。

如果我不得不猜测 - 其中一个承诺永远不会解决,因为您在某个地方有一个永远不会调用 resolverejectPromise 构造函数。

(Bluebird 会在某些情况下警告您 - 确保您已打开警告)

另一种可能导致这种情况的情况是取消 - 但我假设您没有打开它。

编码愉快。