1

私はかなり混乱しています。非同期関数で取得した値を渡す方法を学びたいです。

基本認証機能を備えたモジュールがあります。ログイン時に、ユーザーモデルに特定のユーザー名のユーザーを検索するように依頼します。

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

しかし、どうすればそのユーザーオブジェクトをログイン関数に戻すことができますか?

4

2 に答える 2

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
    };
}
于 2013-02-18T18:11:29.970 に答える
0

それを戻すことはできません(関数は非同期であり、login完了したときにすでに戻っているため)。ただし、それを別の関数に渡すことができます。

于 2013-02-18T18:07:59.450 に答える