sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag köra en sats EFTER att en loop är klar i javascript?

Se async.whilst . Du vill ha flödeskontroll av for loop, för vilken detta ger en återuppringning för att styra varje 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);
  }
)

Antingen det eller använd Promise.all() på insamlade löften att returnera "ett stort resultat". Men du skulle också behöva byta till promised-mongo från mongojs , som närmaste motsvarighet, eftersom det finns fler mongodb-drivrutiner som faktiskt stöder löften. Den är bara den direkta gaffeln från 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("");
})

Inte exakt samma sak, eftersom det är en lista och inte tre, men poängen är att Promise objekt skjuter upp tills de faktiskt anropas för att lösas, så du kan mata parametrarna i slingan, men exekvera senare.



  1. MongoDB C#-drivrutin, fråga av ett arrayelement med hjälp av regex

  2. Är det möjligt att ha kondition i mangustbefolkning

  3. vänta tills andra distributioner börjar köras innan andra kan skapas?

  4. Python-redis:hämta binär data efter att en klient konfigurerats med decode_responses=True