node.js 在执行'n'异步回调后执行函数
Posted
技术标签:
【中文标题】node.js 在执行\'n\'异步回调后执行函数【英文标题】:node.js execute function after 'n' async callback are executednode.js 在执行'n'异步回调后执行函数 【发布时间】:2013-02-02 03:11:42 【问题描述】:我不知道如何在 '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();
)
)
)
)
【问题讨论】:
【参考方案1】:您可以利用出色的 async 库,它具有此功能和许多其他不错的特性。要具体完成您想要做的事情,您可以使用系列:
https://github.com/caolan/async#series
或并行:
https://github.com/caolan/async#parallel
两者的区别在于series一个接一个地运行所有函数,而parallel同时运行所有函数。无论哪种情况,在它们都完成后都会有一个回调,这似乎是您想要完成的。
【讨论】:
【参考方案2】:我建议使用异步库,例如 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
来实现。
【讨论】:
以上是关于node.js 在执行'n'异步回调后执行函数的主要内容,如果未能解决你的问题,请参考以下文章