【问题标题】:Cannot get valid list while using redis with node.js将 redis 与 node.js 一起使用时无法获取有效列表
【发布时间】:2012-12-16 03:44:38
【问题描述】:

我正在使用 node.js 并使用 redis 来缓存服务器上的一些数据。

我的代码:

var client = redis.createClient();
client.on("error", function (err) {
    console.log("Error " + err);
});

client.flushall();

function redis_get(key){
    client.get(key, function(err, value) {
        if (err) {
        console.error("error");
        } else {
            return value;
        }
    });
}

function redis_set(key, value){
    client.set(key, JSON.stringify(value), function(err) {
        if (err) {
            console.error("error");
        }
    return true
    });
}

function main(){

    var new_items = [{"id": 1, "name": "abc"}, {"id": 2, "name": "xyz"}, {"id": 3, "name": "bbc"}];

    //set data in redis
    redis_set("key", new_items);

    //get data from redis
    var redis_items = redis_get("key");
}

代码摘要:

主函数被调用,它进一步调用了另外 2 个函数(redis_set 或 redis_get)。 redis_set 接受一个键和一个值对,而 redis_get 接受指向数据的键。

问题:

该套装完美运行,但问题在于 GET。我没有按照我在 redis 中设置的方式获取数据。我在 get 中使用了 JASON.parse(),因为我在设置数据时对数据进行了字符串化。

【问题讨论】:

  • 那么您以什么形式获取数据?看起来您正试图将异步函数视为同步函数。还是 client.set / client.get 阻止执行?

标签: javascript node.js redis


【解决方案1】:

从redis读取数据是异步操作。您不能从回调中返回值。您需要将回调传递给您的 redis_get 函数以接收获取的值。

function redis_get(key, callback) {
    client.get(key, function(err, value) {
        if(err) {
            console.error("error");
        } else {
            callback(value); // or maybe callback(JSON.parse(value));
        }
    });
}

并得到一个值:

redis_get("key", function(redis_items) {

});

【讨论】:

  • 抱歉,有两件事还不清楚;首先回调?是另一个功能吗?而你的代码的第二部分
  • nodejs中任何涉及IO的操作都是异步的。所以这样的操作不能以经典的方式返回值。相反,它会执行您提供的回调函数并将结果作为参数传递。
猜你喜欢
  • 1970-01-01
  • 2018-07-07
  • 2019-11-25
  • 1970-01-01
  • 2013-07-20
  • 2016-07-28
  • 1970-01-01
  • 2017-04-24
  • 2016-07-09
相关资源
最近更新 更多