1

我试图创建一个文件“users.js”,其中 id 喜欢管理对用户数据的所有 redis 访问。在这个文件中,我有下一个功能,我将用户保存在列表中,然后从他们的键中加载所有用户:

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?有没有其他方法来组织代码并保持数据库访问由字段分隔?

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 回答