У меня есть следующий код:
function myPromiseFunc() {
return new Promise((resolve) => {
resolve(Promise.resolve(123));
});
}
Как мы знаем, метод Promise.resolve
немедленно разрешает Promise с простым значением.
Итак, Promise.resolve(123) -> Promise<fulfilled>
Но:
console.log(myPromiseFunc());
вернет Promise со статусом pending
. Почему? Функция разрешения передается исполнителю асинхронно? Причина:
setTimeout(console.log, 0, res);
вернет Promise<fulfilled>
.
Я знаю, что Promises используют микрозадачи, но он должен использоваться только для обработчиков.
Promises/A+ говорит:
[[Resolve]](обещание, x) -> If/when x is a promise and fulfilled, fulfill promise with the same value.
Кстати. Этот фрагмент вернет Promise<fulfilled>
:
function myPromiseFunc() {
return new Promise((resolve) => {
resolve(123);
});
}
Похоже, что resolve
является асинхронным только тогда, когда Promise передается как значение.
Пожалуйста, помогите разобраться. Спасибо!
@evolutionxbox Я знаю. Это просто теоретический вопрос. Почему у меня статус
pending
вместоfulfilled
?Используйте
myPromiseFunc().then(console.log)
, чтобы увидеть разрешенный вывод.Я не хочу видеть разрешенный вывод :) Я хочу понять, меняют ли обещания свои статусы асинхронно или что происходит