Ich war auf Versprechungen ein Javascript-Tutorial folgen, here, speziell diesen Code (die nur einen Katzen Würfel simuliert):Javascript-Versprechung: kann ein Parameter, der erfüllt wird, gehen außer Geltungsbereich?
function dieToss() {
return Math.floor(Math.random() * 6) + 1;
}
function tossASix() {
return new Promise(function(fulfill, reject) {
var n = Math.floor(Math.random() * 6) + 1;
if (n === 6) {
fulfill(n);
} else {
reject(n);
}
});
}
function logAndTossAgain(toss) {
console.log("Tossed a " + toss + ", need to try again.");
return tossASix();
}
function logSuccess(toss) {
console.log("Yay, managed to toss a " + toss + ".");
}
function logFailure(toss) {
console.log("Tossed a " + toss + ". Too bad, couldn't roll a six");
}
tossASix()
.then(null, logAndTossAgain) //Roll first time
.then(null, logAndTossAgain) //Roll second time
.then(logSuccess, logFailure); //Roll third and last time
Ich denke, es ist klar, was es tut, aber als Test, änderte ich den letzten paar Zeilen dazu statt
tossASix()
.then(logSuccess, logAndTossAgain) //Roll first time
.then(logSuccess, logAndTossAgain) //Roll second time
.then(logSuccess, logFailure); //Roll third and last time
Wenn ich verstehe, Versprechen richtig (bitte Geduld mit mir hier, wie ich bin immer noch versuchen, meinen Kopf um sie zu bekommen) ich hätte gedacht, dass, wenn ich ein 6 auf dem ersten Wurf bekommen , wäre der Ausgang
gewesenYay, managed to toss a 6.
Yay, managed to toss a 6.
Yay, managed to toss a 6.
aber in der Tat, was ich bekommen ist
Yay, managed to toss a 6.
Yay, managed to toss a undefined.
Yay, managed to toss a undefined.
Warum ist das so? Bedeutet dies, dass nach dem ersten Aufruf von logSuccess (das heißt erfüllen) der Parameter n den Gültigkeitsbereich verlässt? Wenn ja warum? Hat es etwas damit zu tun, dass das Versprechen nur einmal erfüllt wird und das ist es?
ja ich denke, ich habe es, ich fügte tatsächlich eine 'Return Toss;' LogSuccess nach dem Lesen @Panama Prophets Kommentar und es funktioniert. Ich habe nicht bemerkt, dass die .then-Funktion immer etwas zurückgegeben hat, in unserem Fall undefiniert – jazzo