sql >> Databáze >  >> NoSQL >> MongoDB

Jak mohu provést příkaz PO dokončení smyčky v javascriptu?

Viz async.whilst . Chcete řízení toku for smyčka, pro kterou to poskytuje zpětné volání pro řízení každé iterace smyčky.

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

Buď to, nebo použijte Promise.all() na sebrané sliby vrátit „jeden velký výsledek“. Ale také byste museli přejít na promised-mongo z mongojs , jako nejbližší ekvivalent, protože existuje více ovladačů mongodb, které skutečně podporují sliby. To je jen přímý fork z 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("");
})

Není to úplně to samé, protože je to jeden výstup seznamu a ne tři, ale jde o to, že Promise objekty se odkládají, dokud nejsou skutečně zavolány k vyřešení, takže můžete zadat parametry ve smyčce, ale spustit je později.



  1. ImportError:Žádný modul s názvem redis

  2. Yii2 + Redis jako databáze

  3. Kontrolní seznam zabezpečení pro produkční nasazení MongoDB

  4. Vrácení pole vnořených dokumentů prostřednictvím Meteor / Mongo