Promise.All 中长期承诺链接的最佳实践是什么

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

假设我有几个主要的承诺,其中一些 return 承诺在里面。我想从我想到 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')
    })
  })
}

上段代码,2个主要承诺是promise1promise3promise2 将由 promise3 编辑 return。我正在证明 promise3 是一个长期的承诺改变。为了运行,我初始化了

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

结果是

promise1

promise2

promise3

done [ 'promise1', 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");
  }));
});

然后你的问题是:"why is the resolved value of a not equal to b?"。好吧,它们是两个不同的承诺。

return a你return原来promise2。在 a.then 你最终 return promise3.