Добрый день!
У меня есть вопрос по промисам. Буду рад, если поможете прояснить ситуацию.)
Если вкратце, однажды смотрел доклад, где чел рассказывал о промисах, тасках и микротасках, в контексте фронта. Там было сказано о приоритете выполнения, что сначала выполнятся Promisess callbacks (микротаски), а потом обычные (таски).
Мне в контексте ноды задали вопрос а знаю ли я про приоритетность выполнения этого в ноде, на что я ответил, что все это колбеки и они выполнятся с одинаковым приоритетом, кто готов - тот пошел, из одной очереди. А все остальное - это Event Loop (EL) браузера.
Согласия достичь не удалось, я начал гуглить. Нашел информацию о том, где докладчик рассказывает о том ,как работает в этом плане EL браузера, но насколько мне известно, то в ноде дела обстоят иначе, хотя я встречал информацию, где говорилось, что нода так же разделяет эти вещи и промисы выполняются вместе с process.nextTick(), но это же не логично, поскольку через промисы можно и ожидать I/O, а это вообще другая фаза и там не имеет значения это промис, обычный колбек или же async\await.
Спасибо )
Объяснение цикла событий за пару строк в телеграм канале:
если вкратце, то начиная с v11 ноды, цикл событий в ней работает так же, как и в браузере (т.е., независимо от того, обработаны ли ВСЕ хендлеры текущей фазы цикла, после обработки ОДНОГО из них в рамках одной и той же фазы – будет проверка: а не находится ли что-то в job/microtask queue ? зарезолвить то, что там : продолжить работу с хендлерами текущей фазы -> перейти к следующей).
Раньше же (до 11 ноды) т.н. lookup в микротаск кью происходил по завершению процессинга всех хендлеров текущей фазы*
* фазы цикла – структуры данных, не все из которых представлены в виде очереди (т.к. есть и куча, например).
Виток состоит из нескольких фаз: timers, pending callbacks, idle/prepare, etc.
+ к сказанному: process.nextTick() имеет приоритет над промисами в рамках микротаск кью