MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come posso eseguire un'istruzione DOPO che un ciclo è terminato in javascript?

Vedi async.whilst . Vuoi il controllo del flusso di for loop, per il quale fornisce un callback per controllare ogni iterazione del ciclo.

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);
  }
)

O quello o usa Promise.all() sulla raccolta promette di restituire "un grande risultato". Ma dovresti anche passare a promised-mongo da mongojs , come l'equivalente più vicino, poiché ci sono più driver mongodb che supportano effettivamente le promesse. Quello è solo il fork diretto di 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("");
})

Non esattamente la stessa cosa, dato che è un output di una lista e non tre, ma il punto è che la Promise gli oggetti rinviano fino a quando non vengono effettivamente chiamati per essere risolti, quindi puoi inserire i parametri nel ciclo, ma eseguirlo in un secondo momento.