Redis在Node.js中返回true

时间:2018-09-18 06:24:58

标签: node.js asynchronous redis

我正在用打字稿编写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)

这意味着回调函数实际上获取了实际数据,但是以后在另一个函数中使用回调函数时再也无法获取。

2 个答案:

答案 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")