0

ここのセミノーブノードの男。私の翡翠のテンプレートでは...このインターフェースを持てるようになりたいです:

if currentUser.isMemberOfGroup(name)
  -// dosomething 

ただし、ユーザーのメンバーシップを決定するには、マングースとのインターフェースが必要です...これは常に非同期の作業です。例としてマングースのドキュメントを使用すると、これらの行に沿って何かを書きたいと思います(すみません、これはコーヒーで書かれています):

userSchema.methods.isMemberOfGroup = (name) ->
  Club.findOne(name: name).populate({
    path: 'members',
    model: 'User',
    match: { _id: @id }
  }).exec (err, club) ->
    club.members.length > 0

このメソッドが exec 関数からすぐに戻るのではなく bool を返すようにする方法はありますか? そのようなインターフェースを設計する「正しい」方法は何ですか?

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 に答える