我无法理解如何在执行' 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();
})
})
})
})
答案 0 :(得分:8)
我建议使用Caolan's Async之类的异步库。然后,您可以使用async.parallel
,async.series
或async.auto
。 auto
是最灵活的,但比其他人慢一点;在parallel
和series
之间进行选择需要更多关于您尝试做什么的信息 - 您的第一个示例是并行操作,但您的第二个示例是串联的。
但是,如果您不想使用库,则可以编写自定义内容。我会这样做:
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
。
答案 1 :(得分:3)
您可以利用具有此功能的优秀async库以及许多其他不错的功能。要具体完成您要做的事情,您可以使用系列:
https://github.com/caolan/async#series
或平行:
https://github.com/caolan/async#parallel
两者之间的区别在于,系列一个接一个地运行所有功能,而并行运行所有功能。在任何一种情况下,都会在完成后进行回调,这就是你似乎想要完成的事情。