sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo puedo ejecutar una declaración DESPUÉS de que finalice un ciclo en javascript?

Ver async.whilst . Quiere control de flujo de for bucle, para el cual esto proporciona una devolución de llamada para controlar cada iteración del bucle.

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 eso o usar Promise.all() en las promesas recogidas de devolver "un gran resultado". Pero también necesitaría cambiar a promised-mongo de mongojs , como el equivalente más cercano, ya que hay más controladores mongodb que realmente admiten promesas. Esa es solo la bifurcación directa 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("");
})

No es exactamente lo mismo, ya que es una salida de lista y no tres, pero el punto es que la Promise los objetos difieren hasta que realmente se los llama para resolverlos, por lo que puede alimentar los parámetros en el bucle, pero ejecutarlos más tarde.