process.nextTick и setImmediate
Всем здравствуйте. Подскажите пожалуйста, уже голова пухнет..
Почему в этом коде, HTTP запрос отваливается по таймауту: https://gist.github.com/v-gachkovsky...0428f20037f403 ... а если заменить "process.nextTick(tick);" на "setImmediate(tick);" то все ок? $ node -v v5.2.0 |
nextTick никого не пропускает вперед себя в событийном цикле (вроде последний даже не прокручивается, пока есть задачи nextTick). В твоем коде он будет аналогичен простому бесконечному циклу while.
nextTick можно использовать только одноразово - чтобы выполнить действия сразу по завершении текущего потока действий. Соответственно, до обработки запроса дело не доходит, он висит в очереди. |
Цитата:
http://howtonode.org/understanding-process-next-tick Там есть такой же код и автор пишет: In this model, instead of calling compute() recursively, we use process.nextTick() to delay the execution of compute() till the next tick of the event loop. By doing so, we ensure that if any other HTTP requests are queued in the event loop, they will be processed before the next time compute() gets invoked. If we had not used process.nextTick() and had simply called compute() recursively, the program would not have been able to process any incoming HTTP requests. Try it for yourself! Наверное глупая идея читать доки младше 2014 года хотя бы )) видать все поменялось :) |
zett,
По таким тонким вещам всегда есть смысл заглянуть в официальную доку. Для nextTick в самом низу параграфа есть примечание. |
Нет, сначала назвали "next tick", а потом пишут примечание, что он на текущий тик ставится )
|
Всех благодарю :)
|
Часовой пояс GMT +3, время: 08:02. |