MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment puis-je exécuter une instruction APRÈS la fin d'une boucle en javascript ?

Voir async.whilst . Vous voulez le contrôle de flux du for boucle, pour laquelle cela fournit un rappel pour contrôler chaque itération de boucle.

var temphtml = "",
    j = 0;

async.whilst(
  function() { return j < 3 },
  function(callback) {
    db.austinsroom.find({"y": j }, {}).sort({"x": 1}, function(err, records) 
      temphtml += records.map(function(el) {
          return el.display;
      }).join("") + '<br>';
      j++;
      callback(err);
    });
  },
  function(err) {
     if (err) throw err;
     console.log(temphtml);
  }
)

Soit cela, soit utilisez Promise.all() sur les promesses collectées de retourner "un grand résultat". Mais vous devrez également passer à promised-mongo de mongojs , comme l'équivalent le plus proche, car il existe davantage de pilotes mongodb qui prennent en charge les promesses. Celui-là est juste le fork direct de mongojs :

var temphtml = "",
    j = 0,
    promises = [];

for ( var j=0; j < 3; j++ ) {
   promises.push(db.austinsroom.find({"y": j }, {}).sort({"x": 1}).toArray());
   promises.push('<br>');   // this will just join in the output
)

Promise.all(promises).then(function(records) {
    temphtml += records.map(function(el) {
        return el.display;
    }).join("");
})

Ce n'est pas exactement la même chose, puisqu'il s'agit d'une sortie de liste et non de trois, mais le fait est que la Promise les objets diffèrent jusqu'à ce qu'ils soient réellement appelés à résoudre, vous pouvez donc alimenter les paramètres dans la boucle, mais exécuter plus tard.