2017-01-13 16 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を見てきました。

は、コールバックが各nextTick()nextTickQueueアレイ内に押し込まれ、それらがどのようにwhileループの各反復インデックスtickInfo[kIndex]をインクリメント、_tickCallback()順序で後に実行される方法を確認してください。

あなたの例では、3番目と4番目のコールバックは1番目と2番目のキューに同時に存在しないと思います。彼らはとにかくその順序で実行されるだろう。

ところで、たとえFIFOの実行順序であっても、これは文書化されていない動作なので、それに頼ることは推奨されません。内部のものはいつでも変更できます。

+0

リサーチに感謝します!言い換えれば、これは現在の動作ですが、それがそのまま残るという保証はありません – slezica

+0

あなたは大歓迎です!ええ、@slebetmanのコメントに同意します。これは内部のものなので、いつでも変更できます。私はその説明を将来の読者のための答えに加えました。 –

関連する問題