0

这里是一个半菜鸟节点的家伙。在我的翡翠模板中......我真的很想能够拥有这个界面:

if currentUser.isMemberOfGroup(name)
  -// dosomething 

但是,确定用户的成员资格涉及与 mongoose 的交互……这始终是异步的。以猫鼬文档为例,我想按照这些思路写一些东西(对不起,这是用咖啡写的):

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 函数立即返回?设计这样一个界面的“正确”方式是什么?

这是 Club 模型的其余部分:

clubSchema = Mongoose.Schema
  name: String
  hashTag: String
  members: [{ type: Mongoose.Schema.Types.ObjectId, ref: 'User' }]
4

1 回答 1

0

Jade 是否支持异步功能(似乎不支持https://github.com/visionmedia/jade/issues/641)?如果没有,您必须在渲染模板之前加载该值。

事实上,这通常是一种很好的做法,因为它允许分离关注点(视图不应该知道数据库)。顺便说一句,如果您需要执行大量异步条件逻辑,请查看https://github.com/olalonde/boolasync(我编写的一个模块)。此外,如果您需要执行多个数据库调用,我强烈建议您使用 async.series 或 async.parallel 以使您的代码更具可读性(不要嵌套超过几级)。

于 2013-06-14T21:28:42.527 回答