我刚刚面对当前工作中的情况。我想知道在这种情况下可以使用的最佳模式
我的代码是这样的
for(var i =0 ;i < collection.length; i++){
asynCall( collection[i],function(){....})//doing a asynchronous call
}
我只是想知道做
等功能的最佳模式我希望一次完成每个异步调用并获取下一条记录,
依此类推,在每次迭代'i'我想完成异步调用,完成后只需要下一条记录
是否有任何方法以这种方式执行功能。或者有没有其他方法可以做到这一点,npm中是否有任何模块可以帮助我
请指导我提供最佳解决方案
答案 0 :(得分:2)
async.eachSeries(collection, function(collectionItem, callback) {
asynCall(collectionItem, callback);
}, function(err){
//Handle errors here
});
答案 1 :(得分:0)
最简单的方法是使用管理异步控制流的库,如async.js。
您可以使用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();
});
}());
如果你真的想在循环中顺序调用异步函数,也可以使用async/await
。
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();
但是,您需要some effort才能使其真正发挥作用。