وعود في حلقة ، تفعل شيئا عند القيام به
سؤال
في الأساس ، أحاول معرفة طريقة للقيام بمجموعة من الاستعلامات في حلقة ثم القيام بشيء ما بمجرد الانتهاء من كل شيء.
حصلت عليه للعمل ، ولكن فقط لأنني استخدمت هذه المكتبة العظيمة التي يلتف كل من مونغودب مع الوعود.
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)
});
حصلت عليه للعمل ، ولكن فقط لأنني استخدمت هذه المكتبة العظيمة التي يلتف كل من مونغودب مع الوعود.
في بلوبيرد هل يمكن أن يكون مجرد القيام به promisifyAll(require("mongodb"))
بدلا من الانتظار لشخص ما لجعل وحدة نمطية.
نصائح أخرى
يمكنك فقط استخدام متغير بسيط لحساب عدد الردود مثل ذلك:
giveacodicetagpre.لا تنتمي إلى StackOverflow