Redis возвращает true в nodejs - PullRequest
       4

Redis возвращает true в nodejs

0 голосов
/ 18 сентября 2018

Я пишу 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, Victor

РЕДАКТИРОВАТЬ:

Таким образом, в основном я отправляю данные из 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)

Это означает, что функция обратного вызова фактически получает фактические данные, но это никогда не достигается позже, когда я использую функцию обратного вызова в другой функции.

1 Ответ

0 голосов
/ 09 июля 2019
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) })
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...