Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将redis与node.js一起使用时无法获取有效列表_Javascript_Node.js_Redis - Fatal编程技术网

Javascript 将redis与node.js一起使用时无法获取有效列表

Javascript 将redis与node.js一起使用时无法获取有效列表,javascript,node.js,redis,Javascript,Node.js,Redis,我正在使用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

我正在使用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");
}
代码摘要:

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");
}
调用main函数,它进一步调用其他两个函数(redis\u set或redis\u get)。Redis_set接受一个键和一个值对,而Redis_get接受指向数据的键

问题:

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

该设置工作正常,但问题在于GET。我没有像在redis中设置的那样获取数据。我在get中使用了JASON.parse(),因为我在设置数据时对数据进行了字符串化。

从redis读取数据是一个异步操作。无法从回调返回值。您需要将回调传递给接收获取值的
redis\u 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) {

});

那么,您以什么形式获取数据?看起来您正试图将异步函数视为同步函数。或者执行
client.set
/
client.get
阻止执行?抱歉,有两件事还不清楚;第一回电话?这是另一个功能吗?代码的第二部分nodejs中涉及IO的任何操作都是异步的。因此,这样的操作不能以经典方式返回值。相反,它执行您提供的回调函数,并将结果作为参数传递。