85 votes

Utilisation de la fonction de promesse dans la carte du tableau Javascript

Avoir un tableau d'objets [obj1, obj2]

Je veux utiliser la fonction Map pour créer une requête DB (qui utilise des promesses) sur chacun d'eux et attacher 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 [non défini, non dé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

190voto

madox2 Points 6855

Mappez votre tableau aux promesses, puis vous pouvez 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)
})
 

16voto

mdziekon Points 2420

Vous ne renvoyez 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
  })
})
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X