ホームページ >ウェブフロントエンド >jsチュートリアル >Array.map で Async/Await を使用するときに「タイプ 'Promise[]' をタイプ 'number[]' に割り当てることができません」を解決する方法

Array.map で Async/Await を使用するときに「タイプ 'Promise[]' をタイプ 'number[]' に割り当てることができません」を解決する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 01:04:09867ブラウズ

How to Resolve

Array.map での Async/Await の使用

Array.map で async/await を使用しようとすると、ユーザーは頻繁に次のようなエラーに遭遇します

"Type 'Promise[]'タイプ「number[]」には割り当てられません。タイプ「Promise」。型 'number' に割り当てることはできません。"

このエラーは、await 関数が Promise を解決する必要があるために発生します。ただし、Array.map は通常、単一の Promise ではなく Promise の配列を返します。

Solution

この問題に対処するには、Array によって返される Promise の配列を変換します。 Promise.all を使用して単一の Promise にマップします。 Promise.all は、反復可能な引数内のすべての Promise が解決された場合にのみ解決されます。

問題のあるコードの修正版は次のとおりです:

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

Promise.all を利用することで、Promise の配列は単一の Promise として解決され、await が正しく機能できるようになり、「Type 'Promise[]' は正しくありません」が排除されます。タイプ 'number[]' に割り当て可能です。" エラー。

追加オプション

特定のユースケースに応じて、Promise.allSettled、Promise.any、または Promise の使用を検討してください。 Promise.all の代わりに .race。ただし、上記のような状況では通常、Promise.all が最も適切な選択です。

以上がArray.map で Async/Await を使用するときに「タイプ 'Promise[]' をタイプ 'number[]' に割り当てることができません」を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。