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);
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。