Node.js在'n'个异步回调执行后执行函数

5
我不知道如何在执行“n”个异步函数后执行回调函数,例如:
var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})

有没有一种方法可以在不将函数写在另一个函数中的情况下,在执行4个异步函数后执行after4AsyncOperation函数,例如:

    var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    process.nextTick(function(){
        //do stuff
        process.nextTick(function(){
            //do stuff
            process.nextTick(function(){
                //do stuff
                after4Asyncoperation();
            })
        })
    })
})
2个回答

8
我建议使用异步库,例如Caolan's Async。然后,您可以使用async.parallelasync.seriesasync.auto。其中auto最灵活,但比其他两种方法慢一些;在选择parallelseries之间时需要更多关于你的需求的信息 - 你的第一个例子将是并行操作,但第二个例子是串行执行。
但是,如果您不想使用库,可以编写自定义内容。我会按照以下方式进行:
var numFuncs = 4;
var callback = function(){
  numFuncs--;
  if(numFuncs == 0) {
    after4AsyncOperation();
  }
}
var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})

这个功能通过从我们期望回调被调用的次数 (numFuncs) 开始倒数,并且只有在我们被正确调用了指定次数后才会调用after4AsyncOperation

3
您可以利用强大的async库,该库具有此功能和许多其他不错的功能。为了实现您想要做的特定事情,您可以使用series或parallel: https://github.com/caolan/async#serieshttps://github.com/caolan/async#parallel 两者之间的区别在于series一个接一个地运行所有函数,而parallel同时运行它们。 在任何一种情况下,当它们全部完成后会有一个回调函数,这正是您似乎想要实现的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接