我正在用打字稿编写RESTful API,并且尝试使用存储在redis中的已解析数据以及另一个函数中的特定键。我遇到的问题是,我没有收到来自Redis的实际数据,而是一直收到布尔值true。不幸的是,我尝试了很多搜索并阅读了Redis文档,但无济于事。现在有人在这里如何访问实际数据,以便可以在其他功能中使用它吗?我怀疑我在这里面临某种异步问题,但我不确定。
例如,如果我尝试将响应绑定到变量,则会发生这种情况:
const key = something
const reply = client.mget(key);
console.log("This is the reply: " + reply);
This is the reply: true
Br, 维克多
编辑:
因此,基本上,我是将https.get中的数据发送到对象处理程序中,该处理程序将数据解析成我喜欢的形式,然后我对该对象进行字符串化并将其作为字符串发送到redis中,如下所示: >
client.set(redisInfo, JSON.stringify(objecthandler(newdata)));
我目前用于获取数据的实际代码如下:
const getRedis = (rediskey: string, success: any, error: any) => {
client.mget(rediskey, function (err: Error, reply: any) {
if (!err) {
success(reply);
}
else {
error(err);
}
});
};
//My callback function that I'm trying to get to work so I can use the redis data in other functions
function getrediscallback(key: string) {
getRedis(key, function success(reply: string): string {
//This console.log actually returns the data that I want
console.log("this is the reply: " + reply);
return reply;
},
function error(err: Error) {
console.log("Something went wrong" + err);
});
}
因此,当我在另一个函数中使用回调时,它将看起来像这样:
const redisdata = getrediscallback("getCars");
//This gives me the value of undefined
console.log(redisdata)
这意味着回调函数实际上获取了实际数据,但是以后在另一个函数中使用回调函数时再也无法获取。
答案 0 :(得分:0)
const redis = require('redis');
const client = redis.createClient(6379);
const bluebird = require("bluebird");
bluebird.promisifyAll(redis.RedisClient.prototype);
bluebird.promisifyAll(redis.Multi.prototype);
const redisdata = await client.getAsync('user:photos');
if (redisdata) {
console.log(`cache EXISTS`)
return res.json({ source: 'cache', data: JSON.parse(redisdata) })
}
答案 1 :(得分:0)
import util from "util";
import redisClient from "../config/redisConfig";
let hgetall = util.promisify(redisClient.hgetall).bind(redisClient);
await hgetall("Key")