web-dev-qa-db-fra.com

Utilisation de la fonction de promesse dans la carte Javascript Array

Avoir un tableau d'objets [obj1, obj2]

Je souhaite utiliser la fonction Map pour créer une requête de base de données (qui utilise des promesses) et associer les résultats de la requête à chaque objet.

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

Bien sûr, cela ne fonctionne pas et le tableau de sortie est [indéfini, indéfini]

Quelle est la meilleure façon de résoudre un problème comme celui-ci? Cela ne me dérange pas d'utiliser d'autres bibliothèques comme async

44
Jorge

Mappez votre tableau sur les promesses et vous pourrez alors utiliser la fonction 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

Vous ne retournez pas vos promesses dans la fonction map.

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