我使用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");
});
答案 0 :(得分:0)
由于Promise的异步行为,经典的foreach循环不会等到每个Promise解析/拒绝。因此,您无法确保在每次迭代结束时Promise不再处于待处理状态。
蓝鸟对Promise的实现有一个很好的功能:Promise.each,它会等到Promise结算/拒绝: http://bluebirdjs.com/docs/api/promise.each.html