使用Javascript - 等待数异步回调的回归?(Javascript - waiting f

2019-06-23 21:21发布

什么是用于处理多个异步回调的最佳方法/库? 现在,我有这样的事情:

_.each(stuff, function(thing){
   async(thing, callback);
});

我需要执行一些代码的回调已经烧成中的每个元素后stuff

什么是做到这一点的干净的方式? 我愿意用库。

Answer 1:

有一个叫大图书馆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");
});


Answer 2:

既然你已经使用下划线你可能看_.after 。 它确实你问什么了。 从文档:

_.after(count, function)

创建一个版本后,才第一次被称为计数的时间点运行的功能。 有用的分组异步响应,要确保所有的异步调用完成,然后再继续。



Answer 3:

我建议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
}


Answer 4:

async.parallel()/ async.series应该满足您的需求。 你可以在所有的REST调用成功,这被执行最后的回调提供。

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);
async.series([
    function(){ ... },
    function(){ ... }
], callback);


Answer 5:

有一个计数器,说async_count 。 由一个每次提高它在开始的请求(内环路你),并有回调减少一个,并检查零已经达到了 - 如果是这样,所有的回调已经返回。

编辑:尽管,如果我是一个写这个,我想链中的请求,而不是并行运行他们 - 换句话说,我有一个请求队列,并有回调检查队列为下一个请求作出。



Answer 6:

见我来了类似的问题的回答:

协调的node.js并行执行

我的fork()函数内部自动维护计数器。



文章来源: Javascript - waiting for a number of asynchronous callbacks to return?