【发布时间】:2017-03-19 03:21:45
【问题描述】:
我刚刚开始在 node.js 中进行开发。最近,我在 'event loop' 和 node 的异步机制中做了一些 deep dive。但我仍然不完全理解sync and async callbacks 之间的区别。
在这个来自 node.js API 的示例中,我明白为什么不清楚首先调用哪个函数。
maybeSync(true, () => {
foo();
});
bar();
但是,如果我们有:
syncOrAsync(arg, () => {
if (arg) {
cb(arg);
return;
}
});
syncOrAsync(true, function(result) {
console.log('result');
});
console.log('after result);
我不清楚为什么它们总是按同步顺序执行,尽管我做了一个回调函数,应该由事件循环执行 after 堆栈为空(console.log('after result ') 已完成)。我是否总是需要添加process.nextTick(cb); 才能获得异步? process.nextTick 和setTimeout(); 有什么区别?
【问题讨论】:
-
除非你有真正异步的东西,比如计时器或外部调用等。代码将始终是同步的,因为这是所有 javascript 代码的默认状态,添加回调不会使其异步.
-
所以我总是需要加
process.nextTick()? -
不,你需要添加一些异步的东西。
标签: javascript node.js asynchronous callback