gpt4 book ai didi

node.js - 从异步的 Mongoose 聚合返回值

转载 作者:可可西里 更新时间:2023-11-01 10:14:30 26 4
gpt4 key购买 nike

写一个帮助程序来获取两个用户的友谊,看看他们是否已经确认了他们的友谊,或者是否处于待定状态或其他情况。

result[0].friends[0].status 返回 0、1 或 2。

例如。

[ { 编号:59974d2915a07e09b88e3b4b, 状态:1, _id: 59974d9015a07e09b88e3b53 } ]

我正在使用以下辅助方法来尝试获取工作正常但我似乎无法设置的值。

UserSchema.methods.getRelationship = function getRelationship(username, userid, callback) {

var relationship = 0;

User.aggregate([
{
$match: {
username: username,
'friends.id': userid
}
},
{
$project: {
friends: {
$filter: {
input: '$friends',
as: 'fr',
cond: {
$eq: ['$$fr.id', userid]
}
}
}
}
}
], function (err, result) {
if (err) {
console.log(err);
return;
}
if (result.length >= 1) {
relationship = result[0].friends[0].status;
}
}
);

return relationship;
}

但是

user.getRelationship(req.params.username, req.session.user.id)

返回未定义。为什么?

更新代码

app.get('/:username', requireLogin, function(req, res, next) {
var relationship = 0;
user.getRelationship(req.params.username, req.session.user.id, function(err, r) {
// r should be 1
relationship = r;
});

res.render("user", {
data: user,
relationship: relationship,
layout: 'user'
})
}
})

})

关系作为 0 传递回( Handlebars ) View

最佳答案

因为您正在进行异步调用——您不能从异步调用中返回

您可以做的是在您的方法中传递一个回调——您已经完成了。除了你没有调用它。从内部回调中获得结果后,调用主回调。

UserSchema.methods.getRelationship = function (username, userid, callback) {
var relationship = 0;
User.aggregate([
// ...
], function (err, result) {
if (err)
return callback(err);
if (result.length)
relationship = result[0].friends[0].status;
callback(null, relationship);
});
});

然后你会使用它

user.getRelationship(req.params.username, req.session.user.id, function (err, relationship) {
console.log(err, relationship);
res.render(/* ... */);
});

除此之外,这个函数作为 static 看起来更好因为它不涉及当前用户。

关于node.js - 从异步的 Mongoose 聚合返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46382389/

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