Étant donné le code suivant :
var arr = [1,2,3,4,5];
var results: number[] = await arr.map(async (item): Promise<number> => {
await callAsynchronousOperation(item);
return item + 1;
});
ce qui produit l'erreur suivante :
TS2322 : Le type 'Promise<number>[]' n'est pas assignable au type 'number[]'. Le type 'Promise<number> n'est pas assignable au type 'number'.
Comment puis-je le réparer ? Comment puis-je faire async await
et Array.map
travailler ensemble ?
6 votes
Pourquoi essayez-vous de transformer une opération synchrone en une opération asynchrone ?
arr.map()
est synchrone et ne renvoie pas de promesse.2 votes
Vous ne pouvez pas envoyer une opération asynchrone à une fonction, comme
map
qui s'attend à ce qu'il soit synchrone, et s'attendre à ce que cela fonctionne.2 votes
@jfriend00 J'ai plusieurs instructions await dans la fonction interne. C'est en fait une longue fonction et je l'ai juste simplifiée pour la rendre lisible. J'ai ajouté maintenant un appel await pour rendre plus claire la raison pour laquelle elle doit être asynchrone.
1 votes
Vous devez attendre quelque chose qui renvoie une promesse, pas quelque chose qui renvoie un tableau.
0 votes
Async/await ne fait pas partie de ES7.
5 votes
Une chose utile à savoir est que chaque fois que vous marquez une fonction comme étant
async
vous faites en sorte que cette fonction renvoie une promesse. Donc, bien sûr, une carte d'async renvoie un tableau de promesses :)