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

Hvordan kan jeg udføre en sætning EFTER en loop er færdig i javascript?

Se async.whilst . Du vil have flowkontrol af for loop, for hvilket dette giver et tilbagekald for at kontrollere hver loop iteration.

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

Enten det eller brug Promise.all() på indsamlede løfter om at returnere "ét stort resultat". Men du skal også skifte til promised-mongo fra mongojs , som den nærmeste ækvivalent, da der er flere mongodb-drivere, der faktisk understøtter løfter. Den er bare den direkte gaffel fra 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("");
})

Ikke helt det samme, da det er én listeoutput og ikke tre, men pointen er, at Promise objekter udskyder, indtil de faktisk kaldes for at løse, så du kan fodre parametrene i løkken, men udføre senere.



  1. Mongodb - regex match af nøgler til underdokumenter

  2. Forårsdata MongoDB eksempel virker ikke

  3. C# + MongoDB - ObjectId uden at bruge MongoDB DataTypes/Attributes

  4. Find og erstat strenge i dokumenter effektivt