Значение из client.get () является «истинным» вместо реального значения - PullRequest
10 голосов
/ 03 августа 2011

Я использую nowjs и node_redis. Я пытаюсь создать что-то очень простое. Но пока что учебник оставил меня пустым, потому что они делают только console.log ().

//REDIS
var redis = require("redis"),
    client = redis.createClient();

client.on("error", function (err) {
    console.log("Error "+ err);
});

client.set("card", "apple");

everyone.now.signalShowRedisCard = function() {
    nowjs.getGroup(this.now.room).now.receiveShowRedisCard(client.get("card").toString());
}

На моей стороне клиента:

now.receiveShowRedisCard = function(card_id) {
    alert("redis card: "+card_id);
}

Предупреждение выдает только «true» - я ожидал получить значение ключа «card», который называется «apple».

Есть идеи?

Ответы [ 3 ]

12 голосов
/ 03 августа 2011

Вы пытаетесь использовать асинхронную библиотеку в режиме синхронизации.Это правильный путь:

//REDIS
var redis = require("redis"),
    client = redis.createClient();

client.on("error", function (err) {
    console.log("Error "+ err);
});

client.set("card", "apple", function(err) {
    if (err) throw err;
});

everyone.now.signalShowRedisCard = function() {
    var self = this;
    client.get("card", function (err, res) {
        nowjs.getGroup(self.now.room).now.receiveShowRedisCard(res);
    });
}
1 голос
/ 23 февраля 2019

Один из вариантов - использовать Bluebird, чтобы превратить обратные вызовы Redis в обещания. Тогда вы можете использовать его с .then() или async/await.

import redis from 'redis'
import bluebird from 'bluebird'

bluebird.promisifyAll(redis)
const client = redis.createClient()

await client.set("myKey", "my value")
const value = await client.getAsync("myKey")

Обратите внимание, что к вашим методам должен быть добавлен Async.

1 голос
/ 31 декабря 2018

Использовать Async Redis

npm i async-redis --save

const asyncRedis = require("async-redis");    
const client = asyncRedis.createClient(); 

await client.set("string key", "string val");
const value = await client.get("string key");

console.log(value);

await client.flushall("string key");
...