3

UserModeluserId < 10 を持つすべてのユーザーの名前を取得するように、モデルでメソッドを定義したいと考えています。

以下は私の実装です:

// pseudo code
UserModel === {
    userId : Number,
    userName: String
}

UserSchema.statics.getUsersWithIdLessThan10 = function(){
    var usersLessThan10 = []
    this.find({userId : {$lt : 10}}, function(error, users){
        users.forEach(function(user){
            console.log(user.userName) // ... works fine
            usersLessThan10.push(user.userName)
        })
    })
    return usersLessThan10
}

これが機能しないように見える理由を理解しています — async find API。しかし、もしそうなら、それを行う方法は何ですか?この非同期処理は圧倒されます。

4

2 に答える 2

9

次のようにコールバックを追加し、このコールバックでユーザーを返します。

UserSchema.statics.getUsersWithIdLessThan10 = function(err, callback) {
    var usersLessThan10 = []
    this.find({userId : {$lt : 10}}, function(error, users){
        users.forEach(function(user){
            console.log(user.userName) // ... works fine
            usersLessThan10.push(user.userName)
        })
        callback(error, usersLessThan10)
    })
}

次にusersLessThan10、コールバックで呼び出します。

... .usersLessThan10(function (err, users) {
    if (err) {
        // handle error
        return;
    }
    console.log(users);
})
于 2013-11-01T03:15:38.877 に答える