node.js:异步回调值

时间:2013-02-18 18:06:04

标签: javascript node.js asynchronous

我很困惑。我很想学习如何传递我在async函数中获得的值。

我有一个带有基本身份验证功能的模块。在登录中,我要求用户模型搜索具有给定用户名的用户。

login: function(req){
    var username = req.body.username,
        password = req.body.password;

    user.find(username);
}

然后用户模型继续并执行此操作。

exports.find = function(username){
console.log(User.find({username: username}, function(error, users){
    // I get nice results here. But how can I pass them back.
}));
}

但是如何将该用户对象传递回登录功能?

2 个答案:

答案 0 :(得分:2)

您需要将回调函数传递给该方法。 Node.js需要一种非常回调驱动的编程风格。

例如:

// in your module
exports.find = function(username, callback){
    User.find({username: username}, function(error, users){
        callback(error, users);
    });
}

// elsewhere... assume you've required the module above as module
module.find(req.params.username, function(err, username) {
    console.log(username);
});

所以你不返回值;你传入函数然后接收值(冲洗,重复)

您在User类上的登录方法将如下所示:

login: function(req, callback){
    var username = req.body.username,
        password = req.body.password;

    user.find(username, function(err, user) {
        // do something to check the password and log the user in
        var success = true; // just as an example to demonstrate the next line
        callback(success); // the request continues
    };
}

答案 1 :(得分:0)

你无法传递返回(因为该函数是异步的,login在完成时已经返回了)。但是你可以将提前传递给另一个函数。