Javascript 在Node.js中的循环中移动到下一个迭代之前等待承诺
我在node.js中有以下循环Javascript 在Node.js中的循环中移动到下一个迭代之前等待承诺,javascript,node.js,Javascript,Node.js,我在node.js中有以下循环 for (var i in details) { if (!details[i].AmntRcvd > 0) { res.sendStatus(400); return; } totalReceived += details[i].AmntRcvd; UpdateDetail(details[i].PONbr, details[i].LineID).then((results) => { console.log
for (var i in details) {
if (!details[i].AmntRcvd > 0) {
res.sendStatus(400);
return;
}
totalReceived += details[i].AmntRcvd;
UpdateDetail(details[i].PONbr, details[i].LineID).then((results) => {
console.log(results);
details[i].QtyOrd = results.QtyOrd;
details[i].QtyRcvd = results.QtyRcvd;
details[i].QtyPnding = results.QtyPnding;
details[i].UnitCost = results.UnitCost;
}).catch((error) => {
console.log(error);
});
}
UpdateDetail函数返回一个承诺。在继续循环的下一次迭代之前,我如何等待承诺解决/拒绝。您可以使用wait:
for (var i in details) {
if (!details[i].AmntRcvd > 0) {
res.sendStatus(400);
return;
}
totalReceived += details[i].AmntRcvd;
await UpdateDetail(details[i].PONbr, details[i].LineID).then((results) => {
console.log(results);
details[i].QtyOrd = results.QtyOrd;
details[i].QtyRcvd = results.QtyRcvd;
details[i].QtyPnding = results.QtyPnding;
details[i].UnitCost = results.UnitCost;
}).catch((error) => {
console.log(error);
});
console.log('done with ' + i)
}
以下是文档:
您可以使用wait:
for (var i in details) {
if (!details[i].AmntRcvd > 0) {
res.sendStatus(400);
return;
}
totalReceived += details[i].AmntRcvd;
await UpdateDetail(details[i].PONbr, details[i].LineID).then((results) => {
console.log(results);
details[i].QtyOrd = results.QtyOrd;
details[i].QtyRcvd = results.QtyRcvd;
details[i].QtyPnding = results.QtyPnding;
details[i].UnitCost = results.UnitCost;
}).catch((error) => {
console.log(error);
});
console.log('done with ' + i)
}
以下是文档:
您可以使用
wait
关键字来解决此问题。更多信息
您可以使用
wait
关键字来解决此问题。更多信息
您可以为此使用异步库。然后选择async.eachSeries 您需要先执行npm安装异步 以下是一个例子:
var async = require('async');
async.eachSeries(yourarray,function(eachitem,next){
// Do what you want to do with every for loop element
next();
},function (){
//Do anything after complete of for loop
})
您可以为此使用异步库。然后选择async.eachSeries 您需要先执行npm安装异步 以下是一个例子:
var async = require('async');
async.eachSeries(yourarray,function(eachitem,next){
// Do what you want to do with every for loop element
next();
},function (){
//Do anything after complete of for loop
})
@Ze Rebeus,我错了,但这里是异步工作的方式。@Ze Rebeus,我错了,但这里是异步工作的方式。仅供参考:不建议使用
for..in
(尤其是在数组上)。将用于数组中的..of
,将用于..of
与Object.keys()
,Object.values()
或Object.entries()
用于对象。仅供参考:不建议将用于..
中(尤其是在数组上)。将用于数组的..of
,将用于..of
与对象的Object.keys()
,Object.values()
或Object.entries()
结合使用。