Heim >Web-Frontend >js-Tutorial >Warum ist die Verschachtelung von „async/await' in Promise-Konstruktoren ein Anti-Pattern?

Warum ist die Verschachtelung von „async/await' in Promise-Konstruktoren ein Anti-Pattern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-16 13:49:12643Durchsuche

Why is Nesting `async/await` within Promise Constructors an Anti-Pattern?

Das Anti-Pattern der Verschachtelung von async/await innerhalb von Promise-Konstruktoren

In diesem Fall wird die Funktion async.eachLimit zur Verwaltung eingesetzt Aufgrund der Anzahl gleichzeitiger Vorgänge entsteht ein Dilemma. Die anfängliche Versuchung besteht darin, den Code wie folgt zu strukturieren:

function myFunction() {
  return new Promise(async (resolve, reject) => {
    eachLimit((await getAsyncArray), 500, (item, callback) => {
      // Operations using native promises
    }, (error) => {
      if (error) return reject(error);
      // Resolve with the next value
    });
  });
}

Obwohl es logisch erscheinen mag, die Funktion „myFunction“ als asynchron zu deklarieren, ist dies nicht machbar, da der innere Rückruf der Funktion „eachLimit“ erhalten bleibt unzugänglich. Allerdings birgt dieser Ansatz eine erhebliche Gefahr: Fehler können möglicherweise nicht behandelt werden.

Dieser Ansatz ist ein Lehrbuchbeispiel für das Anti-Pattern, bei dem Versprechen innerhalb des Konstruktors eines anderen Versprechens verwendet werden. In diesem Fall ist die Gefahr unbehandelter Fehler besonders groß. Um dies zu vermeiden, betrachten Sie den folgenden Codeausschnitt:

let p = new Promise(resolve => {
  ""(); // TypeError
  resolve();
});

(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches the error.

Während in diesem Szenario die erste Zeile eine Ausnahme auslöst, wird der Fehler ordnungsgemäß vom „catch“-Block der asynchronen Pfeilfunktion behandelt. Die richtige Fehlerbehandlung ist entscheidend, um die Stabilität aufrechtzuerhalten und unerwartetes Verhalten in Ihrer Codebasis zu verhindern.

Das obige ist der detaillierte Inhalt vonWarum ist die Verschachtelung von „async/await' in Promise-Konstruktoren ein Anti-Pattern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn