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,执行异步函数,完成它,转到下一步
请为我提供最佳解决方案最简单的方法是使用管理异步控制流的库,如 您可以使用
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
});