Вижте async.whilst
. Искате контрол на потока на for
цикъл, за който това осигурява обратно извикване за контролиране на всяка итерация на цикъл.
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);
}
)
Или това, или използвайте Promise.all()
на събрани обещания за връщане на "един голям резултат". Но също така ще трябва да превключите към promised-mongo
от mongojs
, като най-близкия еквивалент, тъй като има повече mongodb драйвери, които действително поддържат обещания. Този е просто директният разклон от 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("");
})
Не е точно същото нещо, тъй като това е един списък, а не три, но въпросът е, че Promise
обектите се отлагат, докато действително бъдат извикани за разрешаване, така че можете да подадете параметрите в цикъла, но да изпълните по-късно.