Compte tenu des nombreuses promesses, quelle est la manière idiomatique d’obtenir les résultats dans ES7?
Voici ce que je veux faire:
async function getImports() {
let imports = [System.import('./package1.js'), System.import('./package2.js')];
let promises = await* imports;
let results = [];
await promises.forEach(val => val.then(data => results.Push(data))); //seems hacky
console.log(results); // array of 2 resolved imports
}
Le résultat est correct, mais je fais toujours une forEach
et une then
pour transformer les promesses résolues en résultats. Cela ne me semble pas juste. Y a-t-il un moyen plus propre?
Comme mentionné dans le numéro que vous avez déposé, le problème principal est que await*
n'est plus une chose et a été supprimé. Malheureusement, une erreur de syntaxe n'a pas été correctement générée dans Babel 6 et a été traitée comme une variable normale await
.
Vous aurez besoin de explicitement
let [p1, p2] = await Promise.all([
System.import('./package1.js'), System.import('./package2.js')]);
Je ne peux pas croire que cela fonctionne réellement, forEach
renvoie undefined
qui ne peut pas await
. Si vous avez besoin d'une boucle, utilisez map
pour obtenir un tableau de résultats (promis).
Dans votre cas, vous semblez chercher un simple
async function getImports() {
let promises = [System.import('./package1.js'), System.import('./package2.js')];
let results = await Promise.all(promises)
console.log(results);
}
Une façon de faire ça ....
async function abc() {
let p1 = getReviews();
let p2 = getMenu();
let [reviews, menu] = await results(p1, p2);
}
function results(...rest) {
return Promise.all(rest).catch(err => console.log(err));
}