Промис p1
связан с тонаблем, который снова возвращает связанный промис p2
.
p2
связан p1
с оператором console.info:
p0 = Promise.resolve();
p1 = p0.then(() => {
console.info("Step1");
p2 = p1.then(() => {
console.info("Step2");
});
return p2;
});
Я ожидаю, что код выведет «Шаг 1» и «Шаг 2». Но он показывает только «Шаг 1». Кто-нибудь может объяснить, почему?
Я знаю, что then()
обычно складывается как (p0.then(...).then(...)
). Так что этот вопрос не про изменение кода, чтобы он работал, а про причина, по которой это не работает.
Вы создали обещания, которые зависят друг от друга для разрешения, поэтому ни одно из них не разрешается.
Когда вы возвращаете обещание из .then
, обещание, которое разрешается этим .then
, будет выполняться только тогда, когда выполнено возвращенное обещание. Так
p1 = p0.then(() => {
// ...
return p2;
});
означает, что p1
разрешается только тогда, когда:
Но p2 разрешается только после разрешения p1 из-за
p2 = p1.then(() => {
Так что ни решить. Шаг 1 регистрируется, потому что p0 разрешается, а Step2 — нет, потому что ни p1, ни p2 не разрешаются.
Я не вижу здесь никаких кастомов, это все нормальные промисы