Maison >interface Web >js tutoriel >Comment résoudre « Le type « Promise[] » n'est pas attribuable au type « number[] » lors de l'utilisation d'Async/Await avec Array.map ?

Comment résoudre « Le type « Promise[] » n'est pas attribuable au type « number[] » lors de l'utilisation d'Async/Await avec Array.map ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 01:04:09858parcourir

How to Resolve

Utilisation d'Async/Await avec Array.map

Lorsqu'ils tentent d'utiliser async/await avec Array.map, les utilisateurs rencontrent fréquemment une erreur similaire à ce qui suit :

"Le type 'Promise[]' n'est pas attribuable au type 'numéro[]'. Tapez 'Promesse'. n'est pas attribuable au type 'numéro'."

Cette erreur survient car les fonctions d'attente doivent résoudre une promesse. Cependant, Array.map renvoie généralement un tableau de promesses au lieu d'une seule promesse.

Solution

Pour résoudre ce problème, convertissez le tableau de promesses renvoyé par Array. mapper à une seule promesse à l’aide de Promise.all. Promise.all ne se résout que lorsque toutes les promesses de son argument itérable ont été résolues.

Voici une version modifiée du code problématique :

const arr = [1, 2, 3, 4, 5];
const results: number[] = await Promise.all(arr.map(async (item): Promise<number> => {
    await callAsynchronousOperation(item);
    return item + 1;
}));

En utilisant Promise.all, le tableau de promesses est résolu comme une seule promesse, permettant à wait de fonctionner correctement, éliminant le "Type 'Promise[]' n'est pas attribuable au type Erreur 'number[]'".

Options supplémentaires

En fonction du cas d'utilisation spécifique, envisagez d'utiliser Promise.allSettled, Promise.any ou Promise.race à la place. de Promesse.all. Cependant, Promise.all est généralement le choix le plus approprié dans des situations comme celle décrite ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn