Позвольте мне показать вам код
Дело 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 () будет запущен.
Также любой может объяснить, что произошло в очереди микрозадач, когда есть цепочка затем без возврата значения?
Может кто-нибудь помочь мне с этим вопросом? Если мое описание вопроса недостаточно четкое, пожалуйста, дайте мне знать, и я постараюсь добавить как можно больше информации.
Спасибо