Node.js 使用process.nextTick
今天发现Node.js文档很好地解释了如何使用process.nextTick.
Node.js文档链接 http://nodejs.org/api/process.html#process_process_nexttick_callback
process.nextTick(function callback(){ });
Node.js确保callback会在处理下一个事件前被调用.
下面是Node.js文档的翻译:
process.nextTick(callback)
在下一个事件循环中调用callback. 这个函数不是简单地等同与setTimeout(fn, 0), 它的效率更高. 一般来说它在所有其他I/O事件触发前被调用, 但是也有例外. 参考下面的process.maxTickDepth
.
process.nextTick(function() { console.log(‘nextTick callback‘); });
这个函数很重要, 尤其当你在开发一些API, 而这些API需要在一个对象被创建以后, 但是在所有其他I/O之前, 允许用户添加事件处理函数到这个对象.
function MyThing(options) { this.setupOptions(options); process.nextTick(function() { this.startDoingStuff(); }.bind(this)); } var thing = new MyThing(); thing.getReadyForStuff(); // thing.startDoingStuff() gets called now, not before.
非常重要, API应该100%同步, 或者100%异步. 考虑下面的例子:
// WARNING! DO NOT USE! BAD UNSAFE HAZARD! function maybeSync(arg, cb) { if (arg) { cb(); return; } fs.stat(‘file‘, cb); }
这个API很危险, 如果这么调用API:
maybeSync(true, function() { foo(); }); bar();
这段代码不明确的地方是, 我们不清楚foo()和bar()哪个会被先调用.
这样写更好
function definitelyAsync(arg, cb) { if (arg) { process.nextTick(cb); return; } fs.stat(‘file‘, cb); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。