在promise . all中实现长承诺链的最佳实践是什么?

What is the best practice for long promise chainings within Promise.All

本文关键字:最佳 是什么 承诺 all promise 实现      更新时间:2023-09-26

假设我有几个主要的promise,其中一些在内部返回promise。我想从承诺函数中检索结果这就是为什么我考虑Promise.all。首先,让我们看一下下面的示例代码

var Promise = require('bluebird');
promise = []
function promise1(){
  return new Promise(function(resolve, reject){
    console.log('promise1');
    resolve('promise1');
  });
}
function promise2(){
  return new Promise(function(resolve, reject) {
    console.log('promise2');
    resolve('promise2');
  });
}
function promise3(){
  promise2().then(function(){
    return new Promise(function(resolve, reject) {
      console.log('promise3');
      resolve('promise3')
    })
  })
}

上面一段代码,两个主要承诺是promise1promise3promise2将由promise3返回。我证明promise3是一个长期的承诺变化。为了运行,我初始化了

promise = [promise1(), promise3()];
Promise.all(promise).then(function(data){
  console.log('done', data);
})

结果

promise1

promise2

promise3

done ['promise ', undefined]

但我期待

done ['promise1', 'promise3']

我的问题是这种情况下的最佳实践是什么?

promise3缺少一个return。有了这个,它就像预期的那样工作了。

function promise3(){
  return promise2().then(function(){
  // ^^^ missing return here
    return new Promise(function(resolve, reject) {
      console.log('promise3');
      resolve('promise3')
    })
  })
}

更新:

如果你简化你的情况,你在做:

var a = new Promise(function(resolve) {
  resolve("a");
});
var b = a.then(function () {
  return new Promise(function(resolve) {
    resolve("b");
  }));
});

然后你的问题是:"为什么a的解析值不等于b ?"。这是两种不同的承诺。

对于return a,您返回原始的promise2。在a.then中,最终返回promise3