문제

기본적으로, 나는 루프에서 쿼리를 한 번 수행하는 방법을 알아 내고 모든 것을 완료 한 후에 뭔가를 해결하려고합니다.

나는 그것을 일하기 위해 그것을 얻었지만, 내가 약속을 가진 모든 몽골을 포장하는이 위대한 도서관을 사용했기 때문에

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)
})
.

내 질문은 이것입니다.지구에 당신은 약속없이 어떤 일을 할 수 있습니까 ??그것은 너무 열심히 일 것 같습니다!

도움이 되었습니까?

해결책

루프를위한 바보

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)
});
.


나는 그것을 일하기 위해 그것을 얻었지만, 내가 약속을 가진 모든 몽골을 포장하는이 위대한 도서관을 사용했기 때문에

in Bluebird는 방금 promisifyAll(require("mongodb"))를 할 수있었습니다 대신누군가가 모듈을 만드는 것을 기다리고 있습니다.

다른 팁

단순한 변수를 사용하여 다음과 같은 응답 횟수를 계산할 수 있습니다 :

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
       }

   }
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top