Ich habe mit Versprechungen zu spielen, aber ich habe Probleme zu verstehen, was mit dem folgenden Code geschieht:JavaScript Versprechen und 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);
});
ich diese a() responded with: hi from a!
sofort Ausgang erwarten, zusammen mit b() responded with: hi from b!
und c() responded with: hi from c!
nach ihre jeweiligen setTimeout()
Brände. Allerdings bekomme ich folgende sofort folgende Ausgabe:
a() geantwortet mit: hi from a!
b() reagierte mit: undefined
c() mit antwortete:
Ich dachte, dass .then()
wartet auf diesen Versprechungen nicht definiert, aber es ist nicht. Jede Hilfe wäre willkommen.
Diese Erklärung ist nicht richtig. Die Funktion 'then()' gibt immer ein neues Versprechen zurück. Im obigen Fall ('b()') ist der Rückgabewert der Funktion jedoch 'undefined', der in eine neue Promise eingeschlossen ist. Es sieht so aus, als ob die zweite Verheißung von der 'a()' Verheißung abgekettet wird, weil der Rumpf der '.then()' Funktion synchron abschließt, also wird der dann sofort beendet. –