Ich versuche herauszufinden, wie Sie Fehler in der Versprechungskette richtig behandeln. Es gibt wenige Versprechen und einer von ihnen wirft Fehler. Im Fehlerfall möchte ich die Funktion in der Kette beenden.Verarbeitungsfehler in Versprechen
Die Fragen, die ich konfrontiert mit sind:
- Wie können wir nächste Anruf von catch-Block beenden?
- Wie kann man die Ausführungsreihenfolge dann() garantieren? Catch(). Then() chain? An diesem Moment beobachte ich, dass der catch-Block nach der Ausführung beider then() -Funktionen aufgerufen wird.
Codebeispiel:
function run() {
test().then(function(data) {
console.log("w3", "Print data: " + data);
});
}
function test() {
return new Promise(function(fulfill, reject) {
ask()
.catch(err => console.log("w3", "Process error from ask: " + err))
.then(reply())
.catch(err => console.log("w3", "Process error from reply: " + err))
.then(function(data) {
console.log("w3", "Finish test");
fulfill(data);
// TODO finish data
})
});
}
function ask() {
return new Promise(function(fulfill, reject) {
console.log("w3", "ask");
// fulfill("Hello");
reject("Cancel Hello");
});
}
function reply() {
return new Promise(function(fulfill, reject) {
console.log("w3", "reply");
fulfill("World!");
// reject("Cancel World");
});
}
die [ 'Promise' Konstruktor Antipattern] vermeiden (https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how (zu vermeiden)! – Bergi
Wenn Sie '.catch' hinzufügen, das eine abgelehnte Zusage nicht zurückgibt oder einen Fehler ausgibt, haben Sie den Fehler" bearbeitet ", daher wird der nächste' .then' aufgerufen ... Promises 101 –
'.dann (reply()) ".... erwartet dann eine ** Funktion ** als Argument, Sie liefern das Ergebnis des Aufrufs einer Funktion ...' .dann (antworten) 'wäre das, wonach Sie suchen - auch das ist Promsies 101 –