Как цикл обработки событий по-разному относится к вложению и сцеплению обещаний - PullRequest
0 голосов
/ 26 июня 2019

То, как цикл обработки событий по-разному обрабатывает вложения и цепочки обещаний, сбивает меня с толку.Пожалуйста, рассмотрите два фрагмента sudo-javascript, которые я написал ниже ...

Сценарий 1 - вложенные обещания

new Promise(()=>{console.log("one")})

new Promise(()=>{new Promise(()=>{console.log("2.5")}))

new Promise(()=>{console.log("three")})

Вывод -
один
2,5
три

Сценарий 2 - цепочки обещаний

new Promise(()=>{console.log("one")})

new Promise().then(()=>{console.log("2.5")})

new Promise(()=>{console.log("three")})

Вывод -
один
три
2,5

Я знаю, что вышеупомянутое правильно и произойдет.Однако, из-за большого количества упрощенных онлайн-объяснений обещаний, проходящих через стек-> куча / таблица-событий-> очередь событий-> стек-> повтор, я очень запутался.Как Сценарий 1-Строка 2 блокирует третью строку кода, так что его вложенное обещание завершается.Я подумал:
1. Функция, отправленная новому обещанию на script1-line2, будет проходить через таблицу событий в очередь событий
2. Затем, как только стек будет пуст, функция запускается, создавая обещание, которое я вложил
3. На этом этапе обещание script1-line3 уже выполнено из-за асинхронности внешних обещаний.
Где мое недоразумение?

...