Utiliser asynchrone attendent avec Tableau.carte

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;
    });

qui génère l'erreur suivante:

TS2322: Type de la Promesse de la<nombre>[]' n'est pas assignable à type de numéro[]'.
Type de la Promesse de la<nombre> n'est pas cessible de type "nombre".

Comment puis-je résoudre ce problème? Comment puis-je faire async await et Array.map travailler ensemble?

  • Pourquoi essayez-vous de faire une opération synchrone dans une opération asynchrone? arr.map() est synchrone et ne retourne pas une promesse.
  • Vous ne pouvez pas envoyer une opération asynchrone à une fonction, comme map, qui attend synchrone un, et espérer qu'il fonctionne.
  • J'ai beaucoup attendent des déclarations à l'intérieur de la fonction. C'est en fait une longue fonction et j'ai juste simplifié pour le rendre lisible. J'ai ajouté maintenant attendre l'appel pour le rendre plus clair pourquoi il doit être asynchrone.
  • Vous avez besoin d'attendre quelque chose qui renvoie une promesse, pas quelque chose qui renvoie un tableau.
  • async/await ne fait pas partie de l'ES7.
  • Une chose utile à réaliser, c'est que chaque fois que vous marquez une fonction comme async, vous réalisez que la fonction de retour d'une promesse. Alors, bien sûr, une carte de async retourne un tableau de promesses 🙂

InformationsquelleAutor Alon | 2016-10-19