gpt4 book ai didi

asynchronous - async nodejs查询和处理结果

转载 作者:可可西里 更新时间:2023-11-01 09:47:17 24 4
gpt4 key购买 nike

我有一个从 mongodb 中获取的对象数组。数组中的每个元素都是一篇文章,作者为 user_id。现在我想找到与 user_id 相关的用户信息。

由于 Node 使用异步方法从数据库中查找数据,因此 forEach 循环在回调完成之前完成。

docs.forEach(function(doc, index){
//get the user for this doc
User.find({_id: mongo.BSONPure.ObjectID(doc.user_id)}, {name: 1, username: 1, email: 1}).skip(0).limit(1).toArray(function(err, user){
user = user[0]
if(err) {
throw new Error(err)
} else {
docs[index].user = user
if(doc.for_id) {
User.find({_id: mongo.BSONPure.ObjectID(doc.for_id)}, {name: 1, username: 1, email: 1}).skip(0).limit(1).toArray(function(err, for_user){
for_user = for_user[0]
if(err) {
throw new Error(err)
} else {
docs[index].for_user = for_user
}
})
}
}
})
})

所以在这个循环结束时,如果我发送一个 cb(docs),docs 没有 user 和 for_user 属性。我该如何克服这个问题?

最佳答案

使用Step for node.js .它将按顺序运行您的函数

var Step = require('step');

Step( docs.forEach(...), function() { cb(docs); } );

或者,如果您知道记录总数,则可以在处理完最后一个记录后调用回调。像这样

var count = docs.count(); // or something
var processed = 0;
docs.forEach(... if (++processed == count) cb(docs); );

关于asynchronous - async nodejs查询和处理结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com