1. ホーム
  2. javascript

JavascriptのArray map内でプロミス関数を使用する

2023-09-11 05:37:08

質問

オブジェクト[obj1, obj2]の配列がある。

Map関数を使って、それら全てについてDBクエリ(プロミスを使う)を行い、クエリの結果を各オブジェクトに付けたい。

[obj1, obj2].map(function(obj){
  db.query('obj1.id').then(function(results){
     obj1.rows = results
     return obj1
  })
})

もちろんこれはうまくいかず、出力配列は [undefined, undefined] となります。

このような問題を解決する最善の方法は何でしょうか?asyncのような他のライブラリを使っても構わないのですが...。

どのように解決するのですか?

配列をpromiseにマッピングし、その上で プロミス.all() 関数を呼び出します。

var promises = [obj1, obj2].map(function(obj){
  return db.query('obj1.id').then(function(results){
     obj1.rows = results
     return obj1
  })
})
Promise.all(promises).then(function(results) {
    console.log(results)
})