2017-07-15 73 views
0

我正在使用lodash _.forEach循环和内部_.forEach循环我正在使用多个承诺,并把数组承诺。使用sendEmailApi方法我发送电子邮件给用户,我的要求是如果我从我想从外部_.forEach循环退出任何错误,不想处理所有的承诺。下面 编写的代码,但不能正常工作,它的处理整个_.forEach循环,如果我在循环的中间Nodejs foreach使用promises循环中断结果

_.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"); 
}); 
+3

的'_.forEach()'循环之前的任何电子邮件请求完成已完成。 – Pointy

+1

不要像这样建立自己的JSON--使用JSON.stringify,学习promise如何工作,学习如何异步代码流 - 读取https://stackoverflow.com/questions/14220321/how-do-i-return-the-响应来自安 - 异步调用 –

+0

您初始化'productList'和'displayName'在一个非常奇怪的序列 – Bergi

回答

0

由于承诺的异步行为的,经典的foreach循环不会等到每个收到任何错误的承诺解决/拒绝。因此,在每次迭代结束时,您都不能确定Promise已经不再存在。

蓝鸟的实现承诺的有这样一个整洁的功能:Promise.each,这将等到承诺解决/拒绝: http://bluebirdjs.com/docs/api/promise.each.html

+0

可以分享一些示例承诺每个代码我的代码 –

+0

我希望一旦得到任何拒绝一个承诺,不想处理所有的承诺 –