Async/Await à l'intérieur de la Matrice de#map()
J'obtiens erreur de compilation avec ce code:
const someFunction = async (myArray) => {
return myArray.map(myValue => {
return {
id: "my_id",
myValue: await service.getByValue(myValue);
}
});
};
Message d'erreur est:
attendent est un mot réservé
Pourquoi je ne peux pas l'utiliser comme ça?
J'ai aussi essayé une autre façon, mais il me donne le même message d'erreur:
const someFunction = async (myArray) => {
return myArray.map(myValue => {
const myNewValue = await service.getByValue(myValue);
return {
id: "my_id",
myValue: myNewValue
}
});
};
Je ne pense pas que vous pouvez avoir async flèche fonctions.
github.com/tc39/ecmascript-asyncawait/issues/7
Pour résumer de la liés github discussion, vous ne pouvez pas le faire parce que la fonction anonyme vous êtes de passage en tant que le rappel n'est pas
github.com/tc39/ecmascript-asyncawait/issues/7
Pour résumer de la liés github discussion, vous ne pouvez pas le faire parce que la fonction anonyme vous êtes de passage en tant que le rappel n'est pas
async
et l'intérieur await
ne peut pas affecter la fonction externe.async/await
fait partie de ES2017 (de cette année), pas ES7 (de l'année dernière version).OriginalL'auteur MyTitle | 2017-02-27
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas faire ce que vous imaginez, parce que vous ne pouvez pas utiliser
await
si elle n'est pas directement à l'intérieur d'unasync
fonction.La chose la plus sensée à faire ici serait de rendre la fonction transmise à
map
asynchrone. Cela signifie quemap
serait de retourner un tableau de promesses. Nous pouvons ensuite utiliserPromise.all
pour obtenir le résultat lorsque toutes les promesses de retour. CommePromise.all
lui-même renvoie une promesse, à l'extérieur de la fonction n'a pas besoin d'êtreasync
.Probablement, mais la différence sera négligeable à côté de
service.getByValue
, ce qui pourrait impliquer un appel réseau...merci j'ai commencer à l'utiliser, de toute façon lisibilité est meilleure que la vitesse, parce que la plupart des ES6 async techniques sera toujours plus lent, mais qui se soucient
OriginalL'auteur
Je crois que c'est parce que la fonction de
map
n'est pas async, de sorte que vous ne pouvez pas avoir attendent dans son instruction de retour. Il compile avec cette modification:Essayer dans Babel REPL
Donc... il n'est pas possible de donner une recommandation, sans voir le reste de votre application, mais en fonction de ce que vous essayez de faire, soit faire de la intérieure fonction asynchrone ou essayez de venir avec une architecture différente de ce bloc.
Mise à jour: nous pourrions obtenir de haut niveau attendent un jour: https://github.com/MylesBorins/proposal-top-level-await
[{}, {}]
). Je pense que j'ai besoin d'inclure quelque partawait
, mais ne pouvait pas se rendre compte oùCe qui ne l'
service.getByValue
fonction?elle renvoie simplement ES6 Promesse
Il me semble que l'OP attend un tableau d'id de l'ed des objets comme le résultat final, donc, dans ce cadre, je pense que vous voulez probablement
return await Promise.all(myArray.map
... pour l'équivalence.OriginalL'auteur