Fangen Alle Versprechen Ablehnungen in eine Async-Funktion in JavaScript

Habe ich lief in ein Problem mit dem fangen alle Fehler, wenn mehrere Versprechungen werfen Ablehnung-Fehler nach erwartete in einer async-Funktion (javaScript - Knoten-v8.4.0).

Verweisen, um die folgenden javaScript-Code:

Referenz, die Funktionen timeoutOne() und timeoutTwo (), schicken Sie einfach einen einheimischen Versprechen, dass wird ein Wert nach einer 1-und 2-Sekunden-timeout bzw. ablehnen, oder mit einer Fehlermeldung, wenn ich "deviousState" auf "true".

let deviousState = true;

async function asyncParallel() {
  try {
    let res1 = timeoutOne();
    let res2 = timeoutTwo();
    console.log(`All done with ${await res1} ${await res2}`)
  }
  catch(err) {
    console.log(err)
  }
}
asyncParallel();

let pAll = Promise.all([timeoutOne(), timeoutTwo()]);
pAll.then((val) => {
  console.log(`All done with ${val[0]} ${val[1]}`)
}).catch(console.log);

In beiden Fällen nur das Versprechen, dass gibt zunächst einen Fehler meldet. Ich weiß, dass einige Versprechen Bibliotheken es ist ein Weg, um melden Sie alle Fehler (zum Beispiel die "absetzen" - Methode in bluebird), allerdings bin ich mir nicht sicher, ob es eine Entsprechung für diese Methode in systemeigenen verspricht?

Auch, wenn beide zusagen ablehnen, dann asyncParallel() meldet sich ein nicht abgefangener Fehler mit dem Versprechen, lehnt letzten. Ist, da gibt es keinen eingebauten Mechanismus für asynchrone Funktion try /catch-Blöcke fangen mehrere Ablehnungen in dieser Art und Weise?

Alles funktioniert auf die gleiche in beiden Fällen, wenn das Versprechen zu lösen. Seine nur, dass wenn beide ablehnen, die Versprechen.alle Griffe der Fehler, und die async-Funktion version besagt, dass einer der unbehandelte Versprechen, Fehler, stürzt der Prozess in zukünftigen Versionen von Knoten.

Ist es trotzdem für den try /catch behandeln diese Art von Fehler, richtig? Oder muss ich immer noch auf ein Versprechen.alle innerhalb async-Funktionen, um sicherzustellen, dass der Fehler korrekt behandelt werden?

InformationsquelleAutor MFave | 2017-10-12

Schreibe einen Kommentar