这里有一个半菜鸟节点的家伙。在我的玉模板中...我真的很想能够拥有这个界面:
if currentUser.isMemberOfGroup(name)
-// dosomething
然而,确定用户的成员资格涉及与猫鼬接口......这总是异步的事情。以mongoose docs为例我想写下这些内容(原谅我,这是用咖啡写的):
userSchema.methods.isMemberOfGroup = (name) ->
Club.findOne(name: name).populate({
path: 'members',
model: 'User',
match: { _id: @id }
}).exec (err, club) ->
club.members.length > 0
有没有办法让这个方法返回bool而不是从exec函数立即返回?设计这样一个界面的“正确”方法是什么?
以下是俱乐部模型的其余部分:
clubSchema = Mongoose.Schema
name: String
hashTag: String
members: [{ type: Mongoose.Schema.Types.ObjectId, ref: 'User' }]
答案 0 :(得分:0)
Jade是否支持异步功能(似乎它不是https://github.com/visionmedia/jade/issues/641)?如果没有,则必须在呈现模板之前加载该值。
事实上,这通常是一种很好的做法,因为它允许分离关注点(视图不应该知道数据库)。顺便说一句,如果你需要做很多异步条件逻辑,请看https://github.com/olalonde/boolasync(我写的一个模块)。此外,如果您需要进行多个数据库调用,我强烈建议您使用async.series或async.parallel来使您的代码更具可读性(不要超过几层深度)。