Mongoose - 通过回调函数返回设置虚拟
Posted
技术标签:
【中文标题】Mongoose - 通过回调函数返回设置虚拟【英文标题】:Mongoose - setting virtuals via return on callback function [duplicate] 【发布时间】:2014-07-19 10:21:07 【问题描述】:我在 *** 上看到过类似的问题,但似乎找不到满意的答案。
我使用 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
)
);
任何帮助将不胜感激!
【问题讨论】:
还有另一种解决方案。让你的 virtual 成为一个接受回调的函数。 【参考方案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
elsedata.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
【讨论】:
以上是关于Mongoose - 通过回调函数返回设置虚拟的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Mongoose 的 JavaScript 在同一行同时有返回和回调?