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ď č. 1Funkcia 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;