3

我希望在模型上定义一个方法,UserModel以便获取所有 userId < 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
}

我明白为什么这似乎不起作用——异步查找 API。但如果是这样的话,那该怎么做呢?这种异步的东西有点压倒性。

4

2 回答 2

9

Add callback and return the users in this callback as follows:

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)
    })
}

Then call usersLessThan10 with the callback:

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

尝试这个:

接口代码:

var UserApi = require('./UserSchema');

var callback = function(response){
    console.log(response); // or res.send(200,response);
}

UserApi.getUsersWithIdLessThan10(callback);

用户架构代码:

UserSchema.getUsersWithIdLessThan10 = function(callback){
    var usersLessThan10 = []
    this.find({userId : {$lt : 10}}, function(error, users){
        if (error)
           { callback(error)}
        else{
          users.forEach(function(user){
              console.log(user.userName) // ... works fine
              usersLessThan10.push(user.userName);
              //TODO: check here if it's the last iteration
                 callback(usersLessThan10);
          })
        }
    })
}
于 2014-10-21T12:28:56.990 回答