javascript - 从nodejs中的redis返回hgetall列表

标签 javascript node.js redis

我正在尝试返回一个 json 对象,以便我可以在呈现页面以填充列表之前将其传回。我的问题是我不知道如何从 hgetall 回调函数中传递对象数据。这是我的示例,其中包含对我所缺少的内容的评论:

var redis = require("redis"),
    client = redis.createClient();

function createMobs() {

    var mobObject = {
        name: "Globlin",
        hp: 12,
        level: 1
    };
    client.hmset("monsterlist", "mobs", JSON.stringify(mobObject));

    var myMobs = function(object) {
        return object;
    };

    var getMobs = function(callback) {   
      client.hgetall("monsterlist", function(err, object) {
        callback(object);
      });    
    };

    // This is returning undefined instead of my mob
    console.log("mobs: ", getMobs(myMobs));

    // Goal is to return moblist
    // return getMobs(myMobs);

}

exports.createMobs = createMobs;

最佳答案

简短的回答是您没有异步思考。因为您在函数中使用异步函数,所以您的函数也必须是异步的。

由于您没有发布其余代码,所以基本思路如下:

var client = require('redis').createClient();

function createMobs(callback) {
    var mobObject = { name: 'Goblin' };

    client.hmset('monsterlist', 'mobs', JSON.stringify(mobObject), function(err) {
        // Now that we're in here, assuming no error, the set has went through.

        client.hgetall('monsterlist', function(err, object) {
            // We've got our object!

            callback(object);
        });

        // There is no way to run code right here and have it access the object variable, as it would run right away, and redis hasn't had time to send you the data yet. Your myMobs function wouldn't work either, because it is returning a totally different function.
    });
};

app.get('/create', function(req, res) {
    createMobs(function(object) {
        res.render('mobs.jade', {
            mobs: object
        });
    });
});

希望这有助于解决问题。

关于javascript - 从nodejs中的redis返回hgetall列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108216/

相关文章:

node.js - 使用 lambda 将文件从 URI 直接流式传输到 S3,使用大量内存

node.js - PouchDB上有没有类似Redis的过期策略?

laravel - Ioredis 与 Laradock redis 容器连接超时

javascript - AngularJS JSON 检查对象

javascript - 函数的第一次执行总是比第二次执行慢吗?

node.js - 在 Express JS 中为 Ajax 设置 REST 路由,仅与 Backbone 一起使用

javascript - Node 如何全局访问对象

java - Redis是否只允许字符串表示而不允许数值

javascript - 使用 puppeteer 或 playwright,有没有办法更新最初在启动方法中传递的参数?

javascript - 尝试加载Firebase时与Electron发生内容安全冲突