[解決済み] Promise.all().then() resolve?
2022-11-12 13:56:40
質問
Node 4.xを使用しています。
Promise.all(promises).then()
があるとき、データを解決して次の
.then()
?
このようなことをしたいのですが。
Promise.all(promises).then(function(data){
// Do something with the data here
}).then(function(data){
// Do more stuff here
});
しかし、データを2番目の
.then()
. 私は使用することができません
resolve(...)
を使うことはできません。
.then()
. こんなことができるんだとわかった。
return Promise.all(promises).then(function(data){
// Do something with the data here
return data;
}).then(function(data){
// Do more stuff here
});
でも、これって正しいやり方じゃないような...。どうするのが正解なのでしょうか?
どのように解決するのですか?
<ブロッククオートしかし、それは適切な方法とは思えません...。
それは確かに適切な方法です(少なくとも a の適切な方法です)。これはプロミスの重要な側面で、プロミスはパイプラインであり、データはパイプライン内の様々なハンドラによって加工することができます。
例です。
const promises = [
new Promise(resolve => setTimeout(resolve, 0, 1)),
new Promise(resolve => setTimeout(resolve, 0, 2))
];
Promise.all(promises)
.then(data => {
console.log("First handler", data);
return data.map(entry => entry * 10);
})
.then(data => {
console.log("Second handler", data);
});
(
catch
ハンドラは簡潔にするために省略しました。プロダクションコードでは
は常に
を使うか、拒否を処理します)。
そこから見える出力は
第一ハンドラ [1,2] 2番目のハンドラ [10,20]
...最初のハンドラは二つの約束の解決を得るので (
1
と
2
を配列として受け取り、それらをそれぞれ10倍した新しい配列を作成して返します。2番目のハンドラは、最初のハンドラが返したものを取得します。
追加で行う作業が同期的なものであれば、それを で に置くこともできます。
例
const promises = [
new Promise(resolve => setTimeout(resolve, 0, 1)),
new Promise(resolve => setTimeout(resolve, 0, 2))
];
Promise.all(promises)
.then(data => {
console.log("Initial data", data);
data = data.map(entry => entry * 10);
console.log("Updated data", data);
return data;
});
...しかし、非同期であれば、ネストされてしまい、ネストはすぐに手に負えなくなるため、そのようなことはしたくありません。
関連
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] HTMLマークアップのどこに<script>タグを記述すればよいですか?
-
[解決済み] 新しい配列を作成せずに、既存のJavaScript配列を別の配列で拡張する方法
-
[解決済み] async/await関数を並列に呼び出す
-
[解決済み] Promise.allのエラー処理
-
[解決済み】Node.jsネイティブのPromise.allは並列処理か逐次処理か?
-
[解決済み] Node JSのPromise.allとforEach
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] Promise : then vs then + catch [重複].