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.parallelasync.seriesasync.autoauto 是最灵活的,但比其他的要慢一些;在 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 来实现。

【讨论】:

以上是关于node.js 在执行'n'异步回调后执行函数的主要内容,如果未能解决你的问题,请参考以下文章

node js 回调函数

Node.js 回调函数

Node.js 回调函数

回调函数

Node.js 异步编程与连接mysql数据库

5Node.js 回调函数