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.