La capture de Toutes les Promesses de Rejets dans un Async Fonction en JavaScript

J'ai rencontré un problème avec la capture de toutes les erreurs lorsque plusieurs promesses jeter rejet des erreurs après avoir attendu dans une fonction async (javaScript - nœud v8.4.0).

Faire référence à du code javaScript suivant:

De référence, les fonctions timeoutOne() et timeoutTwo (), il suffit de retourner un natif de la promesse qui résout une valeur après 1 et 2 deuxième délai, respectivement, ou de les rejeter avec une erreur si j'ai mis "deviousState" à 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);

Dans les deux cas, seule la promesse qui renvoie connecte pour la première fois une erreur. Je sais que dans certains promesse bibliothèques il est une manière d'enregistrer toutes les erreurs (par exemple, le "régler" la méthode en bluebird), cependant, je ne suis pas sûr si il est un analogue de cette méthode en natif promesses?

Aussi, si les deux promesses de rejeter, puis asyncParallel() enregistre une erreur non interceptée, avec la promesse que rejette dernier. Est que parce qu'il n'y est pas intégré dans le mécanisme asynchrone en fonction de blocs try /catch catch de multiples rejets de cette façon?

Tout fonctionne de la même dans les deux cas, si les promesses de résoudre. C'est juste que lorsque les deux rejetons, la Promesse.toutes les poignées, les erreurs, et de l'asynchrone en fonction de la version, l'un des non gérée promesse erreurs de planter le processus dans les futures versions de nœud.

Est-il de toute façon pour les try /catch pour gérer ce type d'erreur correctement? Ou dois-je encore besoin d'utiliser une Promesse.tout l'intérieur de async fonctions pour s'assurer que les erreurs sont traitées correctement?

OriginalL'auteur MFave | 2017-10-12