Javascript 使用承诺结果的Nodejs foreach循环中断

Javascript 使用承诺结果的Nodejs foreach循环中断,javascript,node.js,foreach,promise,lodash,Javascript,Node.js,Foreach,Promise,Lodash,我在使用lodash u0.forEach循环和inside 0.forEach循环,我在使用多重承诺,并在数组中加入承诺。使用sendEmailApi方法,我向用户发送电子邮件时,我的要求是,如果我从外部循环中得到任何错误,我希望退出。forEach循环,不希望处理所有承诺。 代码下面写但不工作,如果我在循环中间有任何错误,它将处理整个.Frach循环。 _.forEach(result, function (value, index) { _.forEach(value, funct

我在使用lodash u0.forEach循环和inside 0.forEach循环,我在使用多重承诺,并在数组中加入承诺。使用sendEmailApi方法,我向用户发送电子邮件时,我的要求是,如果我从外部循环中得到任何错误,我希望退出。forEach循环,不希望处理所有承诺。 代码下面写但不工作,如果我在循环

中间有任何错误,它将处理整个.Frach循环。
_.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");
});

由于Promise的异步行为,经典的foreach循环不会等到每个Promise解析/拒绝。因此,在每次迭代结束时,您无法确定承诺是否不再挂起

蓝鸟承诺的实现有一个简洁的功能:Promise.each,它将等待承诺解决/拒绝:

在任何电子邮件请求完成之前,
\uuuu0.forEach()
循环完成。不要像这样构建自己的JSON-使用JSON.stringify,了解承诺的工作原理,了解异步代码如何流动-阅读您正在以一种非常奇怪的方式初始化
productList
displayName
sequence@Bergi你对如何分配它还有什么想法吗?你应该用
var
声明它们,你应该在附加到它们的循环之前对它们进行初始化。你能为我的代码分享一些示例承诺每个代码吗?我想在一个承诺被拒绝后立即违背承诺,不想处理所有承诺