/ / vykonať finálny dotaz mongoose po ukončení cyklu - node.js, mongodb, mongoose

vykonať finálny dotaz mongoose po dokončení slučky - node.js, mongodb, mongoose

Chcem spustiť slučku dotazov Mongoose na aktualizáciu databázy na základe poľa nazvaného dateStarts. Potom potom chcem vykonať konečný príkaz, ale chcem, aby používal databázy ako oni po všetko, čo sa aktualizuje. Ako je napísané, zdá sa, že posledný dopyt prebieha predtým, ako sa slučka vykoná. Ako to môžem opraviť?

dateStarts.forEach(function(datevalue)
{
var conditions = {//conditions};
var update     = {//updates};
titleRecords.update(conditions, update, options, function(err, data)
{
if (err) throw err;
});
}) //end of forEach loop
titleRecords.remove({//finalcondition});

odpovede:

0 pre odpoveď č. 1

Funkcia update je asynchrónna operácia, to je dôvod remove je spustený pred aktualizáciami. Môžete vytvoriť množstvo sľubov a použiť Promise.all vyriešiť všetky aktualizácie ešte predtým, než ich odstránite:

var updatePromises = dateStarts.map((datevalue) => {
var conditions = {//conditions};
var update     = {//updates};
return titleRecords.update(conditions, update, options);
});

Promise.all(updatePromises)
.then(() => titleRecords.remove({//finalcondition}))
.catch((error) => ...);

Ak chcete, aby sa Mongoose používal pôvodný sľub (uzol verzie 6 alebo vyššej), môžete to urobiť v hornej časti:

mongoose.Promise = global.Promise;