MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann ich eine Anweisung ausführen, nachdem eine Schleife in Javascript beendet wurde?

Siehe async.whilst . Sie wollen Flusskontrolle des for Schleife, für die dies einen Rückruf zur Steuerung jeder Schleifeniteration bereitstellt.

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

Entweder das oder verwenden Sie Promise.all() auf gesammelte Versprechen, "ein großes Ergebnis" zurückzugeben. Aber Sie müssten auch zu promised-mongo wechseln von mongojs , als das nächste Äquivalent, da es mehr mongodb-Treiber gibt, die Versprechungen tatsächlich unterstützen. Das ist nur der direkte Fork von 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("");
})

Nicht genau dasselbe, da es sich um eine Listenausgabe handelt und nicht um drei, aber der Punkt ist, dass Promise Objekte verzögern, bis sie tatsächlich zur Auflösung aufgerufen werden, sodass Sie die Parameter in der Schleife füttern, aber später ausführen können.