了解承诺:需要结合多个结果

时间:2018-12-25 12:10:50

标签: firefox-webextensions

如何处理多个Promise的结果? 在DoNext中说出DoA的结果a和DoB的结果

我读了https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Using_promises 它引入了“ then”语法,该语法应取代“ doom的回调金字塔”,但是我不理解以下内容:

DoA.then(function(a){
    return DoB(a)
})
.then(function(b){
    DoNext(a,b);
})

在DoNext的调用中,a是未知的。我知道这是因为a仅在第2行的匿名函数中定义。但是,在“厄运的回调金字塔”中,我可以访问a,因为在该模式中,DoNext位于匿名函数内,该函数是DoA的成功回调。 我该如何在then-Syntax中处理这个问题?

1 个答案:

答案 0 :(得分:0)

有多种方式处理多个Promise情况。

1-链承诺(虽然很丑)

DoA.then(a => {
    DoB(a).then(.....)

})
.catch(error => console.log(error));

2- Promise.all()

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]

3- async function(但请阅读详细信息)

(async () => {

  const a = await DoA(); // DoA must be a Promise
  const b = await DoB(a); // DoB must be a Promise
  // rest of the code

})();