MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como posso executar uma instrução APÓS um loop terminar em javascript?


Consulte async.whilst . Você quer o controle de fluxo do for loop, para o qual this fornece um retorno de chamada para controlar cada iteração de loop.
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);
  }
)

Ou isso ou use Promise.all() em promessas coletadas para retornar "um grande resultado". Mas você também precisaria mudar para promised-mongo de mongojs , como o equivalente mais próximo, já que existem mais drivers mongodb que realmente suportam promessas. Esse é apenas o fork direto 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("");
})

Não é exatamente a mesma coisa, já que é uma saída de lista e não três, mas o ponto é que a Promise objetos adiam até serem realmente chamados para resolver, então você pode alimentar os parâmetros no loop, mas executar mais tarde.