1

idがユーザーデータへのすべてのredisアクセスを管理したいファイル'users.js'を作成しようとしています。このファイルには、次の関数があります。この関数では、ユーザーをリストに保存して、キーからすべてのユーザーをロードします。

exports.getUsers = function(){
    var usrs;
    client.lrange('users', 0, -1, function(err, rep){
        client.mget(rep, function(e,r){
            usrs = r;
        });
    });
    return usrs;
};

管理パネルのルートを管理しようとする別のファイル「admin.js」があります。このファイルでは、users.jsファイルが必要であり、users.getUsers()関数を呼び出します。ユーザーオブジェクトを含む配列、または少なくともすべてのオブジェクトを含む文字列を取得することを期待しています。問題は、常に「未定義」を返すことです。

私が理解しているように、何が起こっているのかというと、mgetがコールバックを終了する前にusrs変数を返そうとします。しかし、私はそれを解決する方法がわかりません。

問題は...returnステートメントをmgetを待機させるにはどうすればよいですか?コードを整理し、DBアクセスをフィールドで区切っておく他の方法はありますか?

4

1 に答える 1

2

戻る前に応答を待つことはできないためgetUsers、データの準備ができたときに関数が呼び出すコールバックパラメーターを関数でサポートする必要があります。

exports.getUsers = function(callback){
    client.lrange('users', 0, -1, function(err, rep){
        client.mget(rep, function(e,usrs){
            callback(e,usrs);
        });
    });
};
于 2012-08-20T18:20:17.167 に答える