[解決済み】Array.mapで非同期awaitを使用する。
質問
次のようなコードがあるとする。
var arr = [1,2,3,4,5];
var results: number[] = await arr.map(async (item): Promise<number> => {
await callAsynchronousOperation(item);
return item + 1;
});
というメッセージが表示され、次のようなエラーが発生します。
TS2322: 型 'Promise<number>[]' は型 'number[]' に代入できません。 タイプ 'Promise<number> はタイプ 'number' に割り当てることができません。
どうすれば直るのでしょうか?どうすれば
async await
と
Array.map
は一緒に働くのですか?
解決方法は?
ここで問題なのは、あなたが
await
はプロミスではなく、プロミスの配列です。これはあなたが期待することを行いません。
に渡されたオブジェクトが
await
がPromiseでない場合。
await
は、解決しようとせず、単に値をそのまま即座に返します。つまり
await
の配列であるため、await が返す値は単純にその配列であり、型は
Promise<number>[]
.
おそらく、あなたがしたいことは
Promise.all
が返す配列に対して
map
の前に、単一のPromiseに変換するためです。
await
である。
によると
の MDN ドキュメントを参照してください。
Promise.all
:
は
Promise.all(iterable)
メソッドは、次のように解決するプロミスを返します。 引数iterableに含まれる全ての約束が解決したとき、または は、最初に渡されたプロミスが拒否された理由とともに拒否します。
つまり、あなたの場合
var arr = [1, 2, 3, 4, 5];
var results: number[] = await Promise.all(arr.map(async (item): Promise<number> => {
await callAsynchronousOperation(item);
return item + 1;
}));
これにより、ここで発生している特定のエラーを解決することができます。
何をしようとしているのかによりますが、次のようにすることもできます。
Promise.allSettled
,
Promise.any
または
Promise.race
の代わりに
Promise.all
しかし、ほとんどの場合 (この場合を含む) は
Promise.all
を指定します。
関連
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] 非同期アロー関数のシンタックス
-
[解決済み] 非同期関数+await+setTimeoutの組合せ
-
[解決済み】TypeScript - 正しいバージョンのsetTimeoutを使用する(ノードとウィンドウの比較)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]