node.js async.js nextTick vs setImmediate

时间:2014-03-19 18:14:38

标签: node.js asynchronous async.js

我有一个大量使用async.js模块的大型node.js应用程序。

我有很多像这样的代码:

async.series([
    function(callback){
        sql.update(query, callback);
    },
    function(callback){
        if (something){
            sql.update(query2, callback);
        }
        else{
            callback(null);
        }
    }

]);

最大的问题是else语句中的同步回调。我读了一段时间,你不应该用async.js这样做,因为它可能会导致意想不到的结果,但我不确定最好的选择是什么。我读到我应该在某些地方使用process.nextTick,但现在我读到我们不应该使用它,它应该是setImmediate。

有人能指出我正确的方向吗?谢谢!

1 个答案:

答案 0 :(得分:6)

我终于找到了我记得读过一段时间的参考资料。

在此页面上: http://caolanmcmahon.com/posts/nodejs_style_and_structure/

他讨论了规则#3中的一般情况,并在回应页面上的第一条评论时更直接地与我的问题相关联。

即使这不是我的随机错误的原因,我也想根据作者的意图使用该模块,这是问题的关键。

在本文中,他提到使用process.nextTick,但我真的认为node在这种情况下试图摆脱这种情况,并且我在一个月前的异步问题线程中发现了一个响应:

“你需要确保你的函数是异步运行的 - 如果你不知道它是否是异步的,你可以使用setImmediate强制它是异步的”

所以,这就是我要回答的答案。我将在setImmediate中包装任何同步回调。