我正在运行一个由node.js支持的简单Web应用程序,我正在尝试使用redis来存储一些键值对。我所做的只是在命令行上运行“node index.js”,这是我的index.js的前几行:
var app = require('express').createServer();
var io = require('socket.io').listen(app);
var redis = require('redis');
var redis_client = redis.createClient();
redis_client.set("hello", "world");
console.log(redis_client.get("hello"));
但是,我redis_client.get("hello")
而不是"world"
的所有内容都是false
。为什么不返回"world"
?
(我正在运行redis-server)
奇怪的是,发布的here示例代码运行正常,并产生预期的输出。对于简单的set
和get
?
答案 0 :(得分:11)
我敢打赌get是异步的,所以你可以通过回调获得价值。
编辑:
它实际上是异步的:file.js
答案 1 :(得分:3)
你走了!对于ES6
redis_client.get("hello", (err, data)=>{
if(err){
throw err;
}
console.log(data);
});
适用于ES5
redis_client.get("hello", function(err, data){
if(err){
throw err;
}
console.log(data);
});
答案 2 :(得分:0)
这可能有助于讨厌使用回调的人:
只需执行以下操作即可使它散布,而不必使用外部库:
const pick = (fruit, {[fruit]: out, ...fruits}) => [out, fruits];
const [fruit, fruits] = pick('banana', basket);
console.log(fruit);
console.log(fruits);
console.log(basket);
答案 3 :(得分:0)
遇到同样的问题,使用promisify解决了。
const redis = require('redis');
const util = require('util');
const redisUrl ="redis://127.0.0.1:6379";
const client = redis.createClient(redisUrl);
client.set = util.promisify(client.set)
client.get = util.promisify(client.get);
const setRed =async ()=>{
await client.set('name','Jo');
let name = await client.get('name');
//prints the value for name
console.log(name);
}
setRed();