【问题标题】:What is the best practice for long promise chainings within Promise.AllPromise.All 中长承诺链的最佳实践是什么
【发布时间】:2017-02-20 07:47:46
【问题描述】:

假设我有几个主要的 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')
    })
  })
}

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

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

结果是

承诺1

承诺2

承诺3

完成['promise1',未定义]

但我期待

完成 ['promise1', 'promise3']

我的问题是这种情况下的最佳做法是什么?

【问题讨论】:

  • 关于更新,每篇帖子只问一个问题。而是post a new one
  • 您没有正确实施 halcyon 的更改。您在 promise3 上 .then 之前返回承诺。再次检查您的代码。
  • @torazaburo:这只是另一个讨论,将按照 Bergi 的建议将其分开
  • 我们不需要再讨论了。只需运行 Halcyon 建议的代码即可。有用。然后你可以接受他的回答,我们都可以继续前进。

标签: javascript node.js promise bluebird es6-promise


【解决方案1】:

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

【讨论】:

  • 谢谢,真的很有帮助。但我已经更新了我的问题,你能检查一下吗
  • 是否意味着如果我想promise3返回,我必须return promise2().then(function(){})
猜你喜欢
  • 1970-01-01
  • 2017-12-12
  • 2018-10-12
  • 2017-11-15
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
相关资源
最近更新 更多