2016-12-31 3 views
2

Je veux mettre à jour plusieurs documents, donc je dois utiliser la boucle, mais le code ci-dessous est cassé car il a plusieurs res.json.appel async mongodb avec pour boucle

for (i = 0; i < dateArray.length; i ++) { 
     Trucks.update({ 'data.date': dateArray[i] }, {'$set': update}, {'multi':true}, function(err,response){ 
     res.json(response); 
     }) 
    } 

Je peux mettre res.end() mais je veux savoir quand l'opération est terminée. Comment puis-je utiliser un module asynchrone pour améliorer le module asynchrone? Je veux savoir quand l'opération est terminée.

+0

Cela vous dérangerait-il d'utiliser une autre bibliothèque bluebird et promet de remplacer les callbacks? Si oui, cela peut être facilement fait ... faites le moi savoir. –

+0

@NidhinDavid J'ai trouvé une solution, il suffit d'utiliser 'async.forEach' dans async npm –

Répondre

0

Je ne sais pas si c'est une bonne solution. C'est juste un hack.

Je pense que cela répond à vos besoins. Bonne chance.

var docsUpdated = 0; 
var length = dateArray.length; 
for (i = 0; i < length; i++) { 
    Trucks.update({ 
    'data.date': dateArray[i] 
    }, { 
    '$set': update 
    }, { 
    'multi': true 
    }, function(err, response) { 
    if(err) res.end(); 
    docsUpdated += response; 
    if(i === length-1){ 
     res.json(docsUpdated); 
    } 
    }) 
}