Я играл с Promises, но у меня возникают проблемы с пониманием того, что происходит со следующим кодом:JavaScript Обещания и SetTimeout
function a() {
return new Promise(function (resolve, reject) {
resolve("hi from a!");
});
}
function b() {
return new Promise(function (resolve, reject) {
setTimeout(function() {
resolve("hi from b!");
}, 5000);
});
}
function c() {
return new Promise(function (resolve, reject) {
setTimeout(function() {
resolve("hi from c!");
}, 1000);
});
}
a().then(function (resultFromA) {
console.log("a() responded with: " + resultFromA);
b();
}).then(function (resultFromB) {
console.log("b() responded with: " + resultFromB);
c();
}).then(function (resultFromC) {
console.log("c() responded with: " + resultFromC);
});
Я ожидаю, что это выход a() responded with: hi from a!
немедленно, наряду с b() responded with: hi from b!
и c() responded with: hi from c!
после их соответствующие огни setTimeout()
. Тем не менее, я немедленно получаю следующий вывод:
a() ответил: привет от a!
б() ответили не определено
с() в ответ на это не определено
Я думал, что .then()
ждет на эти обещания, но это не так. Любая помощь будет оценена по достоинству.
Это объяснение неверно. Функция 'then()' всегда возвращает новое обещание. Однако в вышеприведенном случае ('b()') возвращаемое значение функции «undefined», которое завернуто в новое обещание. Похоже, второе обещание связано с обещанием 'a()', потому что тело функции .then() 'завершается синхронно, поэтому затем завершается немедленно. –