web-dev-qa-db-ja.com

Javascript配列マップ内でのpromise関数の使用

オブジェクトの配列を持つ[obj1、obj2]

Map関数を使用して、それらすべてに関するDBクエリ(promiseを使用)を作成し、クエリの結果を各オブジェクトに添付します。

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

もちろんこれは機能せず、出力配列は[undefined、undefined]です

このような問題を解決する最良の方法は何ですか?非同期のような他のライブラリを使用しても構いません

44
Jorge

配列をプロミスにマッピングすると、 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)
})
109
madox2

map関数内でPromiseを返していません。

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