2017-01-13 15 views
4

Если вы вызываете process.nextTick() несколько раз, являются ли обратные вызовы выполненными по порядку?Являются ли обратные вызовы process.nextTick вызываемыми в порядке?

Другими словами, цикл событий узла имеет одинаковый приоритет для всех вызовов process.nextTick и выполняет их в порядке FIFO?

Например:

process.nextTick(() => console.log('1')) 
process.nextTick(() => console.log('2')) 

process.nextTick(() => 
    process.nextTick(() => console.log('3')) 
) 

process.nextTick(() => 
    process.nextTick(() => console.log('4')) 
) 

Будет ли это всегда печать 1 2 3 4?

+1

Хмм, [docs] (https://github.com/nodejs/node/blob/master/doc/topics/event-loop-timers-and-nexttick.md) рассказывают о очереди ... Can Впрочем, найти определенную информацию по этому вопросу. – Caramiriel

+1

Даже если они в конечном итоге печатают 1234, не зависят от него. В принципе, НИКОГДА не зависят от недокументированных «функций», потому что они могут измениться в будущем в результате оптимизации и т. Д. – slebetman

ответ

2

Какая именно очередь используется не написана в docs, и я не смог найти официальный источник, который объясняет это, поэтому я взглянул на source code и кажется, что это очередь FIFO, как вы указали.

Проверьте, как обратные вызовы помещаются в nextTickQueue массива после каждого nextTick(), и как они выполняются после того, в _tickCallback(), увеличивающийся индекс tickInfo[kIndex] в каждой итерации цикла.

Я думаю, что в вашем примере третий и четвертый обратные вызовы не будут в одно и то же время в очереди с первым и вторым; но они все равно будут исполняться в таком порядке.

Кстати, даже будучи порядком исполнения FIFO ожидаемым способом, это недокументированное поведение, поэтому на него не рекомендуется полагаться; внутренние вещи могут меняться в любое время.

+0

Спасибо за исследование! Другими словами, это текущее поведение, но нет никакой гарантии, что он останется таким – slezica

+0

Добро пожаловать! Да, я согласен с комментарием, сделанным @slebetman, это внутренний материал, поэтому он может меняться в любое время. Я добавил это объяснение в ответ будущим читателям. –

 Смежные вопросы

  • Нет связанных вопросов^_^