我是node和redis的新手。我在自己的node应用程序中使用redis。 来自redis的数据以同步方式进行。这是我尝试过的。
var redis = require("redis"),
client = redis.createClient();
client.set('key',10,redis.print);
function getfn1(key){
client.get(key,function(err,reply){
if(err){
console.log('Response from getfn1:-');
console.log(err);
return;
}
console.log('Response from getfn1:-');
console.log(reply);
});
}
async function getfn2(key){
let response = await client.get(key);
console.log('Response from getfn2:-');
console.log(response);
}
console.log('1');
getfn1('key');
console.log('2');
getfn2('key');
console.log('3');
结果如下:
1
2
3
Response from getfn2:-
false
Response from getfn1:-
10
如您所见,我正在尝试在getfn2()中使用async和await等待redis的结果,但我得到的响应为'false'而不是原始响应10.如果您建议使用a等待来自redis的数据的方法。
答案 0 :(得分:3)
async/await
语法应与Promises一起使用,但是redis模块默认不会返回Promises。
如果您想使用Promises,这就是documentation所说的:
您也可以通过承诺node_redis来将诺言使用诺言 与bluebird一样:
var redis = require('redis'); bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.Multi.prototype);
它将为所有对象添加异步 node_redis函数(例如,返回client.getAsync()。then())
// We expect a value 'foo': 'bar' to be present // So instead of writing client.get('foo', cb); you have to write: return client.getAsync('foo').then(function(res) { console.log(res); // => 'bar' });
您的getfn2
函数将变为:
async function getfn2(key){
let response = await client.getAsync(key);
console.log('Response from getfn2:-');
console.log(response);
}