Beim Umgang mit asynchronen Szenarien ist es wichtig, einen Knotenabsturz durch unerwünschte Rückrufe zu verhindern. In diesem Artikel untersuchen wir die Best Practices für die Verwendung von Bluebird-Versprechen zur Bewältigung dieser Herausforderung.
Stellen Sie sich das folgende Szenario vor:
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { throw new Error("AJAJAJA"); }, 500); }); } ...
Indem wir innerhalb von setTimeout eine Ausnahme auslösen, umgehen wir den Fehlerbehandlungsmechanismus von Bluebird und stürzen das Programm ab. Wenn die Ausnahme jedoch vor dem setTimeout auftritt, erfasst Bluebird sie erfolgreich:
function getPromise() { return new Promise((done, reject) => { throw new Error("Oh no!"); setTimeout(() => { console.log("hihihihi"); }, 500); }); } ...
Dies zeigt, dass Promises Ausnahmen von asynchronen Rückrufen nicht abfängt. Stattdessen behandeln sie Fehler nur innerhalb ihrer Konstruktor-Rückrufe oder then/catch-Rückrufe.
Um Knotenabstürze zu vermeiden, werfen Sie niemals Fehler in benutzerdefinierten asynchronen Rückrufen. Lehnen Sie stattdessen das umgebende Versprechen ab. Betrachten Sie die folgende Änderung:
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { done(); }, 500); }).then(() => { console.log("hihihihi"); throw new Error("Oh no!"); }); } ...
Indem wir then zum Umschließen des asynchronen Vorgangs verwenden, können wir jetzt den Fehler innerhalb des Bluebird-Rückrufs behandeln.
Das obige ist der detaillierte Inhalt vonWie können Bluebird Promises die Herausforderung der asynchronen Ausnahmebehandlung in Node.js lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!