我有一个大量使用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。
有人能指出我正确的方向吗?谢谢!
答案 0 :(得分:6)
我终于找到了我记得读过一段时间的参考资料。
在此页面上: http://caolanmcmahon.com/posts/nodejs_style_and_structure/
他讨论了规则#3中的一般情况,并在回应页面上的第一条评论时更直接地与我的问题相关联。
即使这不是我的随机错误的原因,我也想根据作者的意图使用该模块,这是问题的关键。
在本文中,他提到使用process.nextTick,但我真的认为node在这种情况下试图摆脱这种情况,并且我在一个月前的异步问题线程中发现了一个响应:
“你需要确保你的函数是异步运行的 - 如果你不知道它是否是异步的,你可以使用setImmediate强制它是异步的”
所以,这就是我要回答的答案。我将在setImmediate中包装任何同步回调。