JavaScript последовательность выполнения очереди микрозадач - PullRequest
0 голосов
/ 16 апреля 2020

Позвольте мне показать вам код

Дело A:

async function gen(){
  await Promise.resolve(1);
  console.log("gen1");
  await Promise.resolve(2);
  console.log("gen2");
  await Promise.resolve(3);
  console.log("gen3");
}

gen();

Promise.resolve(1).then(() => {
  console.log("outter promise 1");
  // return Promise.resolve(1)
}).then(() => {
  console.log("outter promise 2");
})

результат дела A:
gen1
внешнее обещание 1
gen2
внешнее обещание 2
gen3

Дело B:

async function gen(){
  await Promise.resolve(1);
  console.log("gen1");
  await Promise.resolve(2);
  console.log("gen2");
  await Promise.resolve(3);
  console.log("gen3");
}

gen();

Promise.resolve(1).then(() => {
  console.log("outter promise 1");
  return Promise.resolve(1)
}).then(() => {
  console.log("outter promise 2");
})

результат дела B:
gen1
внешнее обещание 1
gen2
gen3
внешнее обещание 2

Разница лишь в том, что случай B возвратил новое обещание в обратном вызове.

Без возврата очередь микрозадачи будет работать в следующей последовательности:

G1 ('gen1') -> P1 ('outter prom1') -> G2 ('gen2') -> P2 ('outter обещание1') -> G3 ('gen3');

При возврате очередь для микрозадачи будет выполняться в следующей последовательности:

G1 () -> P1 () - > G2 () -> ? -> G3 () -> P2 ();

Мой вопрос заключается в том, что произошло в вопросительном знаке, когда P1 () возвращает новое разрешенное обещание. Насколько я понимаю, P1 () создаст новое обещание, но никакие обратные вызовы не будут добавлены, после его разрешения P2 () будет добавлен в список ожидания и G3 () будет запущен.

Также любой может объяснить, что произошло в очереди микрозадач, когда есть цепочка затем без возврата значения?

Может кто-нибудь помочь мне с этим вопросом? Если мое описание вопроса недостаточно четкое, пожалуйста, дайте мне знать, и я постараюсь добавить как можно больше информации.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...