gpt4 book ai didi

javascript - Mongoose 作用域函数中的使用值(value)

转载 作者:行者123 更新时间:2023-12-02 14:18:29 24 4
gpt4 key购买 nike

我想通过用户的 ID 查找该用户的邮件。但我有一个问题,因为 mongoose 函数是异步的。

Mail.find({receiver_id: '#id#'}, function(err, mails) {
var result = [];
var count = 0;
if (mails.length > 0) {
for (m of mails) {
User.findById(m.sender_id, function(err, user) {
if (user) {
result.push({
id: m._id,
title: m.title,
body: m.body
});
if (++count == mails.length) {
res.json({success: true, data: result});
}
}
});
}
} else {
res.json({success: false, error: 'Cannot find any email'});
}
});

问题是,当我得到结果时,所有邮件都是一样的。据我了解,因为 User.findById 是一个异步函数,所以当我在该函数中使用 m 时,m 始终代表 ma​​ils 的最后一个子级强>.

我发现如果我传递一些变量作为 findById 函数的第二个参数,它应该可以工作:

User.findById(m.sender_id, {id: m._id, title: m.title, body: m.body}, function(err, user) {
if (user) {
result.push({id, title, body});
if (++count == mails.length) {
res.json({success: true, data: result});
}
}
});

但是因为我的文档不仅仅只有三个字段,所以我认为还有另一个更好的解决方案。

我怎样才能做到正确?谢谢!

最佳答案

var async = require("async");
var yourResult = [];
async.each(mails, function(mailObj, done){
User.findById(mailObj.sender_id, function(err, user) {
//add data into result. call async callback function.
done();
})
}, function(err){
//final callback write res here
result.push(yourResult);
res.json({success: true, data: result});
});

这里是异步文档。 http://caolan.github.io/async/index.html希望这会有所帮助。

关于javascript - Mongoose 作用域函数中的使用值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38851604/

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