Nodejs使用promises结果预告循环中断

时间:2017-07-15 15:50:11

标签: javascript node.js foreach promise lodash

我使用lodash _.forEach循环和_.forEach循环内部我使用多个promise并放入数组promises。使用sendEmailApi方法我向用户发送电子邮件,我的要求是如果我收到任何错误,我想退出外部_.forEach循环,不想处理所有的承诺。 代码如下写但不能正常工作,如果我在循环中间得到任何错误,它会处理整个_.forEach循环

_.forEach(result, function (value, index) {
    _.forEach(value, function (value1, index1) {
        if(!displayName)
            displayName = value1.displayname;
        productList += '"' + value1.productplannames + '",';
    });
    tempJsonStr = '{"email":"' + index + '","displayname":"' + displayName + '","productplannames":[' + _.trim(productList, ",") + ']}';
    console.log("tempJsonStr",tempJsonStr);
    productList ="";
    displayName="";
    promises.push(emailUtils.sendEmailApiProcess(JSON.parse(tempJsonStr),responsePayLoad,task,done).then(function () {
    }).catch(err => {
        console.log("errrrrrrrrr");
    return false;
    }))

});

Promise.all(promises).then(function () {
    console.log("All done");
});

1 个答案:

答案 0 :(得分:0)

由于Promise的异步行为,经典的foreach循环不会等到每个Promise解析/拒绝。因此,您无法确保在每次迭代结束时Promise不再处于待处理状态。

蓝鸟对Promise的实现有一个很好的功能:Promise.each,它会等到Promise结算/拒绝: http://bluebirdjs.com/docs/api/promise.each.html