什么是用于处理多个异步回调的最佳方法/库? 现在,我有这样的事情:
_.each(stuff, function(thing){
async(thing, callback);
});
我需要执行一些代码的回调已经烧成中的每个元素后stuff
。
什么是做到这一点的干净的方式? 我愿意用库。
什么是用于处理多个异步回调的最佳方法/库? 现在,我有这样的事情:
_.each(stuff, function(thing){
async(thing, callback);
});
我需要执行一些代码的回调已经烧成中的每个元素后stuff
。
什么是做到这一点的干净的方式? 我愿意用库。
有一个叫大图书馆Async.js ,帮助解决了许多异步和流量控制助手这样的问题。 它提供了多种功能的forEach,可以帮助你在一个数组/对象中的每个项目上运行的回调。
退房: https://github.com/caolan/async#forEach
// will print 1,2,3,4,5,6,7,all done
var arr = [1,2,3,4,5,6,7];
function doSomething(item, done) {
setTimeout(function() {
console.log(item);
done(); // call this when you're done with whatever you're doing
}, 50);
}
async.forEach(arr, doSomething, function(err) {
console.log("all done");
});
既然你已经使用下划线你可能看_.after
。 它确实你问什么了。 从文档:
后_.after(count, function)
创建一个版本后,才第一次被称为计数的时间点运行的功能。 有用的分组异步响应,要确保所有的异步调用完成,然后再继续。
我建议https://github.com/caolan/async这一点。 您可以使用async.parallel
做到这一点。
function stuffDoer(thing) {
return function (callback) {
//Do stuff here with thing
callback(null, thing);
}
}
var work = _.map(stuff, stuffDoer)
async.parallel(work, function (error, results) {
//error will be defined if anything passed an error to the callback
//results will be an unordered array of whatever return value if any
//the worker functions passed to the callback
}
async.parallel()/ async.series应该满足您的需求。 你可以在所有的REST调用成功,这被执行最后的回调提供。
async.parallel([
function(){ ... },
function(){ ... }
], callback);
async.series([
function(){ ... },
function(){ ... }
], callback);
有一个计数器,说async_count
。 由一个每次提高它在开始的请求(内环路你),并有回调减少一个,并检查零已经达到了 - 如果是这样,所有的回调已经返回。
编辑:尽管,如果我是一个写这个,我想链中的请求,而不是并行运行他们 - 换句话说,我有一个请求队列,并有回调检查队列为下一个请求作出。
见我来了类似的问题的回答:
协调的node.js并行执行
我的fork()
函数内部自动维护计数器。