sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik een instructie uitvoeren NADAT een lus is voltooid in javascript?

Zie async.whilst . U wilt stroombeheer van de for lus, waarvoor dit een callback biedt om elke lus-iteratie te besturen.

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

Ofwel dat of gebruik Promise.all() op verzamelde beloften om "één groot resultaat" terug te geven. Maar u moet ook overschakelen naar promised-mongo van mongojs , als het dichtstbijzijnde equivalent, omdat er meer mongodb-stuurprogramma's zijn die beloften daadwerkelijk ondersteunen. Dat is gewoon de directe vork van 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("");
})

Niet precies hetzelfde, aangezien het één lijstuitvoer is en niet drie, maar het punt is dat de Promise objecten stellen uit totdat ze daadwerkelijk worden aangeroepen om op te lossen, zodat u de parameters in de lus kunt invoeren, maar later kunt uitvoeren.



  1. groep in mongo exclusief null-waarden

  2. Integratie van mongodb met elasticsearch in node.js-omgeving

  3. Hoe Redis implementeren in CodeIgniter?

  4. Een open standaard maken:Machine Learning Governance met behulp van Apache Atlas