process.nextTick
помещает обратный вызов в очередь. Каждый обратный вызов в этой очереди будет выполнен в самом начале следующего тика цикла событий. Он в основном используется для очистки стека вызовов. Когда в документации говорится, что это похоже на setTimeout
, это означает, что это похоже на использование setTimeout(function() { ... }, 1)
в браузере Он имеет те же варианты использования.
Один пример использования: вы создаете конструктор для некоторого объекта, которому нужны связанные с ним события. Однако вы не можете сразу начать генерировать события, потому что код, создающий его, еще не успел привязаться к событиям. Ваш вызов конструктора находится над ними в стеке вызовов, и если вы продолжите делать синхронные вещи, он останется таким. В этом случае вы можете использовать process.nextTick
, прежде чем приступить к тому, что вы собираетесь делать. Это гарантирует, что у человека, использующего ваш конструктор, будет достаточно времени, чтобы связать события.
Пример:
var MyConstructor = function() {
...
process.nextTick(function() {
self._continue();
});
};
MyConstructor.prototype.__proto__ = EventEmitter.prototype;
MyConstructor.prototype._continue = function() {
// without the process.nextTick
// these events would be emitted immediately
// with no listeners. they would be lost.
this.emit('data', 'hello');
this.emit('data', 'world');
this.emit('end');
};
Пример Middleware с использованием этого конструктора
function(req, res, next) {
var c = new MyConstructor(...);
c.on('data', function(data) {
console.log(data);
});
c.on('end', next);
}