Question

Fondamentalement, j'essaie de trouver un moyen de faire un tas de requêtes dans une boucle pour boucle et de faire quelque chose une fois qu'ils ont tous terminé.

Je l'ai eu pour travailler, mais seulement parce que j'ai utilisé cette grande bibliothèque qui enveloppe toutes les mongodb avec des promesses.

var mongo = require('mongod') 
var db = mongo('mongodb://localhost/builder', ['block''])
var block_ids = ['538d097bbb12479d0e9f70ab', '538ddc7d06c1f0fe296178b1'];

var prom = null;
var blocks = [];
for (i in block_ids) {
    var block_id = block_ids[i];
    prom = db.block.findOne({_id:db.ObjectId(block_id)})
    .then(function(results) {
        blocks.push(results);
    })
}
prom.done(function() {
    console.dir(blocks)
    console.log("DONE! " + blocks.length)
})

Ma question est-ce.Comment sur terre pouvez-vous faire quelque chose comme sans promesses ??Il semble que ce soit si dur!

Était-ce utile?

La solution

stupide pour les boucles

var mongo = require('mongod') 
var db = mongo('mongodb://localhost/builder', ['block''])
var block_ids = ['538d097bbb12479d0e9f70ab', '538ddc7d06c1f0fe296178b1'];


Q(block_ids.map(function(block_id) {
    return db.block.findOne({_id:db.ObjectId(block_id)});
})).all().done(function(blocks) {
    console.dir(blocks)
    console.log("DONE! " + blocks.length)
});


Je l'ai eu pour travailler, mais seulement parce que j'ai utilisé cette grande bibliothèque qui enveloppe toutes les mongodb avec des promesses.

dans Bluebird que vous auriez pu venir faire promisifyAll(require("mongodb")) au lieu deEn attendant que quelqu'un marque un module.

Autres conseils

Vous pouvez simplement utiliser une variable simple pour compter le nombre de réponses comme SO:

var responses = 0;
var blocks = [];

for(var i=0; i<block_ids.length; i++) {
   var block_id = block_ids[i];
   db.block.findOne({_id:db.ObjectId(block_id)}, function (err, result) {
       if(err) {
         console.log(err);
       }
       responses++;
       blocks.push[result];

       if (responses === block_ids.length-1) {
           console.log('all find queries have responded');
           // do whatever
       }

   }
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top