调用(并捕获)多个promise

时间:2018-11-21 22:47:33

标签: node.js promise

我正在尝试运行以下代码(从this link修改):

let cnt = 1;

var prom = () => new Promise(
    function (resolve, reject) {
        try {
            console.log('enter promise ' + cnt);
            if (Math.random() < 0.5) throw new Error('error in promise ' + cnt);
            resolve('done in promise ' + cnt);
        }
        catch (e) {
            reject(e);
        }
        finally{
            cnt++;
        }
    }
);

prom()
    .then(prom())
    .then(function (fulfilled) {
        console.log('all done: ' + fulfilled);
    })
    .catch(function (error) {
        console.log(error.message);
    });

基本上,我正在尝试实现包罗万象的行为,即,如果任何一个诺言失败,请捕获并停止处理。但是无法实现。我想念什么?

2 个答案:

答案 0 :(得分:0)

.then()将回调作为参数,然后您将返回的Promise交给了它。

改为使用.then(prom)

答案 1 :(得分:0)

使用Promise.all

return Promise.all([
  prom(),
  prom()
])
.then(([fullfilled1, fulfilled2]) => {
  console.log('all done: ' + fulfilled1 + ' ' + fulfilled2);
})
.catch(err => {
  console.log(error.message);
});

如果一个失败了,那么每个人都会失败。