我看到遍布stackoverflow的类似问题,但似乎找不到满意的答案。
我正在使用MongooseJS作为我的ODM,我正在尝试设置虚拟getter,而不是查询,分析和返回来自不同集合的信息。
不幸的是,(因为nodejs异步性质)我无法从回调函数中返回信息。有没有简单的方法来解决这个问题?
这是我的代码:
UserSchema.virtual('info').get(function () {
var data = {
a: 0,
b: 0
};
OtherSchema.find({}, function (err, results) {
results.forEach(function (result) {
if (result.open) {
data.a += 1
} else {
data.b += 1
}
});
return data; //return this information
})
});
非常感谢任何帮助!
答案 0 :(得分:1)
您需要将回调函数传递给虚拟方法,如下所示:
UserSchema.virtual('info').get(function (cb) {
var data = {
a: 0,
b: 0
};
OtherSchema.find({}, function(err, results) {
if (err) {
// pass the error back to the calling function if it exists
return cb(err);
}
results.forEach(function(result) {
if(result.open) { data.a+=1 }
else{data.b+=1}
});
// pass null back for the error and data back as the response
cb(null, data);
});
});
然后调用你要做的函数(请原谅我调用虚方法的语法。不是100%确定它在Mongoose中是如何工作的):
UserSchema.info(function(err, data) {
// check if there was an error
// if not then do whatever with the data
}