Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 June 10

DK

Denys Kobzar in NodeUA - JavaScript and Node.js in Ukraine
Спасибо!
источник

DK

Denys Kobzar in NodeUA - JavaScript and Node.js in Ukraine
Т.е. правильно я понимаю, что если сделать одну и ту же операцию, например чтение файла асинхронное, через обычный callback и если обернуть его в Promise, то по приоритету второй выполнится раньше (разумеется в одинаковых условиях) ?
источник

Г

Глеб in NodeUA - JavaScript and Node.js in Ukraine
Предварительный ответ на вопрос – нет.

Пусть меня поправят, если я не прав, но однозначно ответить нельзя. Так как порядок выполнения зависит от многих факторов, например, успела ли система навесить хендлер (или N хендлеров) на ту или иную операци(-ю/-и) до того, как начался проход по витку цикла или же это произошло уже после, и тд.

Я тут быстренько наговнокодил, чтобы можно было поиграться и посмотреть поведение.
https://gist.github.com/gltumakov/383f09384b99ee5c3a5113c2197a3ff0

Например, если запустить код с теми кусочками кода, которые незакомменчены, НЕСКОЛЬКО РАЗ то поведение будет разное: в одних случаях первым будет виден консоль лог – “callback”, в другом – “promisified”

Думаю, так происходит потому, что оборачивание в промис происходит уже после того, как C-шный код обернул результат выполнения I/O и отдал коллбэк в js. Т.е. оборачивание в промис происходит на более позднем этапе на уровне самого js
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
источник

Г

Глеб in NodeUA - JavaScript and Node.js in Ukraine
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
в той статье написано “If we add new microtasks during the execution of the microtasks, they are also executed.”

сделала такой примерчик https://gist.github.com/ellenaua/96092fbcb6d6a4d428156d4a97b15b23 расширяет пример от Глеб

если запустить видно что promisified, promisified2, promisified3 всегда вместе как в этой фразе и сказано
источник

DK

Denys Kobzar in NodeUA - JavaScript and Node.js in Ukraine
Спасибо, тестирую тоже )
источник

DB

Dima Boginsky in NodeUA - JavaScript and Node.js in Ukraine
Глеб
Предварительный ответ на вопрос – нет.

Пусть меня поправят, если я не прав, но однозначно ответить нельзя. Так как порядок выполнения зависит от многих факторов, например, успела ли система навесить хендлер (или N хендлеров) на ту или иную операци(-ю/-и) до того, как начался проход по витку цикла или же это произошло уже после, и тд.

Я тут быстренько наговнокодил, чтобы можно было поиграться и посмотреть поведение.
https://gist.github.com/gltumakov/383f09384b99ee5c3a5113c2197a3ff0

Например, если запустить код с теми кусочками кода, которые незакомменчены, НЕСКОЛЬКО РАЗ то поведение будет разное: в одних случаях первым будет виден консоль лог – “callback”, в другом – “promisified”

Думаю, так происходит потому, что оборачивание в промис происходит уже после того, как C-шный код обернул результат выполнения I/O и отдал коллбэк в js. Т.е. оборачивание в промис происходит на более позднем этапе на уровне самого js
Скорее сам resolve или reject говорит ноде запихнуть микротаску в очередь. Обернули - выполнили callback - resolve - выполнение микротаски
источник

Г

Глеб in NodeUA - JavaScript and Node.js in Ukraine
Да, так более понятно звучит, спасибо
источник

VH

Vladyslav Holovko in NodeUA - JavaScript and Node.js in Ukraine
@tshemsedinov скажіть будь ласка коли можно буде отримати відео з конфи? Або кого запитати? Бо на самому сайті пайна усі в чаті запитують і ніхто не знає відповіді. Плз.
источник
2020 June 11

M

Maxim in NodeUA - JavaScript and Node.js in Ukraine
Мне вот эта статья помогла разобраться с event loop-ом
https://blog.insiderattack.net/event-loop-and-the-big-picture-nodejs-event-loop-part-1-1cb67a182810
источник

M

Maxim in NodeUA - JavaScript and Node.js in Ukraine
А, ну ещё ж в документах к node.js это есть
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Maxim
А, ну ещё ж в документах к node.js это есть
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
Она устарела, там вообще не упомянуты микротаски
источник

M

Maxim in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
Она устарела, там вообще не упомянуты микротаски
Да, точно. Прошу прощения(( Это цикл статей и первые статьи устаревшие. В последней про микротаски есть.
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
Она устарела, там вообще не упомянуты микротаски
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Так видно же что именно обновляют. Последнее обновление - фикс комментария
Там информация верная, но устаревшая. Про промисы ни слова, а человек именно с таким вопросом пришёл
источник

DK

Denys Kobzar in NodeUA - JavaScript and Node.js in Ukraine
Верно, у меня был вопрос конкретно о промисах и микротасках в ноде, я не знал, что с 11 версии это тоже присуще ноде как и браузеру
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Сорян, просто насколько я помню именно Promise это часть v8, а setTimeout,... это уже идет от окруженияю. Когда-то давно билдил локально v8 и запускал repl, так там не было в глобале setTimeout и прочих а Promise был. Можешь по этим причинам они этого не описали в доке.
источник

DK

Denys Kobzar in NodeUA - JavaScript and Node.js in Ukraine
Dmytro Drachov
Сорян, просто насколько я помню именно Promise это часть v8, а setTimeout,... это уже идет от окруженияю. Когда-то давно билдил локально v8 и запускал repl, так там не было в глобале setTimeout и прочих а Promise был. Можешь по этим причинам они этого не описали в доке.
Дело в том, что движки по разному обрабатывали их
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Denys Kobzar
Дело в том, что движки по разному обрабатывали их
А ты не знаешь где был чейндж?
В ноде? в libuv? или нода проапдейтила версию v8 у себя.

Я люблю почитать статейки, но как показивает практика люди - лгут, код - нет=)
источник