Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 在每个循环上完成异步调用,然后转到下一个节点_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 在每个循环上完成异步调用,然后转到下一个节点

Javascript 在每个循环上完成异步调用,然后转到下一个节点,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我目前的工作正面临着一种情况。我想知道在这种情况下工作的最佳模式 我的代码是这样的 for(var i =0 ;i < collection.length; i++){ asynCall( collection[i],function(){....})//doing a asynchronous call } for(var i=0;i

我目前的工作正面临着一种情况。我想知道在这种情况下工作的最佳模式

我的代码是这样的

for(var i =0 ;i < collection.length; i++){
  asynCall( collection[i],function(){....})//doing a asynchronous call
}
for(var i=0;i
我只是想知道做这些功能的最佳模式,例如

我想一次完成每个异步调用并记录下一条记录

  • 对于i=0,执行异步函数,完成它,转到下一步
  • 对于i=1,执行异步函数,完成它,转到下一步
以此类推,在每次迭代中,'i'我希望完成异步调用,完成后只进行下一个记录

是否有任何方法以这种方式实现功能。或者有没有其他方法可以做到这一点,npm中是否有任何模块可以帮助我


请为我提供最佳解决方案

最简单的方法是使用管理异步控制流的库,如

您可以使用
async.series
逐个调用异步函数

async.series([
  function (callback) {
    asynCall(collection[0], callback);
  },
  function (callback) {
    asynCall(collection[1], callback);
  },
  ...
]);
或者,如果您希望保持简单,可以使用普通的旧递归

var i = 0;
(function loop() {
  asynCall(collection[i], function () {
    if (++i < collection.length) loop();
  });
}());
不过,您需要让它真正起作用。

使用:


好的,谢谢,伙计,但出于好奇,我想知道,有没有办法在for-loopTry中使用异步系列方法
function wrapInPromise(x) {
  return new Promise(function (resolve) {
    asynCall(x, resolve);
  });
}

var collection = ['a', 'b', 'c'];

async function doAsyncStuff() {
  for (var i = 0; i < collection.length; i += 1) {
    await (wrapInPromise(collection[i]));
  }
}

doAsyncStuff();
async.eachSeries(collection, function(collectionItem, callback) {
    asynCall(collectionItem, callback);
}, function(err){
    //Handle errors here
});