Heim >Web-Frontend >js-Tutorial >Warum ist die Verwendung von Async/Await innerhalb eines Promise-Konstruktors ein Anti-Pattern?
Promise Constructor Anti-Pattern: Verwendung von Async/Await innerhalb von Promise()
Bei der asynchronen Programmierung wird async/await innerhalb der Executor-Funktion verwendet eines Promise()-Konstruktors gilt als Anti-Muster. Bei dieser Vorgehensweise werden Versprechen in Versprechen eingebettet, was zu potenziellen Fehlern führt, die möglicherweise nicht korrekt weitergegeben werden.
Beachten Sie den folgenden Codeausschnitt:
const { eachLimit } = require("async"); function myFunction() { return new Promise(async (resolve, reject) => { eachLimit((await getAsyncArray), 500, (item, callback) => { // do other things that use native promises. }, (error) => { if (error) return reject(error); // resolve here passing the next value. }); }); }
In diesem Beispiel wird die myFunction aufgerufen und die Der Promise-Konstruktor wird mit einer asynchronen Funktion als Ausführer aufgerufen. Dieses Muster ist problematisch, da es dazu führen kann, dass Fehler nicht ordnungsgemäß weitergegeben werden. Wenn innerhalb des EachLimit-Rückrufs Fehler auftreten, werden diese vom Promise nicht abgefangen und schlagen stillschweigend fehl.
Darüber hinaus kann die Verwendung von async/await im Promise-Konstruktor diese Fallen noch überraschender machen. Vergleichen Sie zum Beispiel Folgendes:
let p = new Promise(resolve => { ""(); // TypeError resolve(); }); (async () => { await p; })().catch(e => console.log("Caught: " + e)); // Catches it.
In diesem Beispiel wird der TypeError synchron innerhalb der Executor-Funktion ausgelöst. Wenn jedoch mit async/await auf das Promise gewartet wird, wird der Fehler vom Catch-Block abgefangen, auch wenn er vor der Auflösung des Promise aufgetreten ist. Dieses Verhalten kann zu Verwirrung und unerwarteten Ergebnissen führen.
Um dieses Anti-Pattern zu vermeiden, wird empfohlen, die Verwendung von async/await innerhalb der Executor-Funktion eines Promise()-Konstruktors zu vermeiden. Verwenden Sie stattdessen die Then- oder Catch-Methoden, um zusätzliche Versprechen zu verketten und Fehler zu behandeln.
Das obige ist der detaillierte Inhalt vonWarum ist die Verwendung von Async/Await innerhalb eines Promise-Konstruktors ein Anti-Pattern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!