Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Node.js中的循环中移动到下一个迭代之前等待承诺_Javascript_Node.js - Fatal编程技术网

Javascript 在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

我在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(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()
结合使用。