Verkettete Versprechen geben die Ablehnung nicht weiter
Trotz ihrer beabsichtigten Abhängigkeit von einem früheren Versprechen können verkettete Versprechen möglicherweise keine Fehler verbreiten. Dieses Verhalten kann rätselhaft sein, liegt aber in der Natur von Promises/A.
Missverständnis: Kettenabhängigkeit
Das Missverständnis ist, dass jedes dann eine Abhängigkeit vom Vorangegangenen impliziert erfolgreiche Lösung des Versprechens. Dies ist jedoch nicht der Fall.
Promise Chaining
Bei der Promise Chaining wird das Ergebnis der Callback-Funktion in einem Then zur Auflösung des nachfolgenden Promises. Deshalb:
Handhabung Ablehnung
Fehler, die in einem Then-Rückruf ausgelöst oder abgelehnt wurden, lösen den Catch- oder Fehlerrückruf des nächsten Versprechens aus. Wenn der Fehler jedoch innerhalb des Rückrufs behandelt wird, wird die Kette fortgesetzt, als ob das Versprechen erfolgreich gelöst worden wäre.
Beispiel:
Bedenken Sie den folgenden Code:
let promise1 = Promise.resolve(42); let promise2 = promise1.then( (value) => value * 2, (err) => { console.error('Error in promise1:', err); // Handle the error (e.g., return a new promise) } ); promise2.then((value) => console.log('Value from promise2:', value));
Wenn in diesem Beispiel Promise1 abgelehnt wird, protokolliert sein Fehlerhandler den Fehler und gibt dann einen Standardwert zurück. Dadurch kann Promise2 fortfahren, als hätte es eine erfolgreiche Antwort von Promise1 erhalten.
Anwendung auf Datenbankaktualisierungen
In Ihrem Datenbankaktualisierungsbeispiel der Fehler in db.query wird in seinem then-Rückruf behandelt und ein Standardwert bereitgestellt. Dadurch können die nachfolgenden Rückrufe fortgesetzt und die Datenbankaktualisierungen trotzdem durchgeführt werden, auch wenn db.query fehlgeschlagen ist.
Best Practices
Um eine konsistente Fehlerbehandlung sicherzustellen, berücksichtigen Sie Folgendes Befolgen Sie die Best Practices:
Das obige ist der detaillierte Inhalt vonWarum ignorieren verkettete Versprechen manchmal Ablehnungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!