我正试图了解何时使用process.nextTick。下面我使用异步库来控制我的代码流,并想知道我是否应该在最终回调中调用nextTick。
async.parallel([
function (callback) {
// do something
callback(data);
},
function (callback) {
// do something
callback(data);
}
],
// callback
function (data) {
process.nextTick(function () {
// do something
});
});
答案 0 :(得分:5)
如果不确切知道你的“做某事”是什么,我认为在这种情况下你不需要使用nextTick
。当您有理由将函数的执行推迟到事件循环的下一次迭代时,可以使用nextTick
。您可能需要阅读Understanding process.nextTick
了解更多详情。
另外,请注意async的parallel
任务完成回调接受参数err, data
,所以你应该这样做:
async.parallel([
function (callback) {
// do something
callback(null, data);
},
function (callback) {
// do something
callback(null, data);
}
],
// callback
function (err, data) {
if (err) throw err;
// do something
});
主要区别在于,如果其中一个并行任务返回错误(使用truthy第一个参数调用callback
),则会立即调用最终回调。
答案 1 :(得分:0)
我的经验是,async.parallel
和其他类似功能正常工作,需要使所有任务绝对异步;我喜欢异步lib,它是我对promises等的第一选择,但如果你不强迫任务异步,可能会有一些奇怪的行为。
见这里: https://github.com/caolan/async#common-pitfalls-stackoverflow
所以它应该是:
async.parallel([
function(cb){
process.nextTick(function(){
doSomePotentiallySyncThing(cb);
});
},
function(cb){
process.nextTick(function(){
doSomePotentiallySyncThing(cb);
});
},
function(cb){
definitelyAsync(cb); // if it's **definitely** async, then we don't need process.nextTick
}
], function complete(err, results){
// we are in the final callback
});
我对此肯定了99%。