как ждать получения ответа от redis в узле? - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в узле и в Redis. Я использую 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

Как вы можете видеть, я пытаюсь дождаться результата от redis с использованием async и await в getfn2 (), но я получаю ответ «ложь» вместо исходного ответа 10. Было бы лучше, если бы вы предложили метод ожидания данных от redis.

1 Ответ

0 голосов
/ 29 июня 2018

Синтаксис async/await предназначен для использования с Promises, но модуль redis по умолчанию не возвращает Promises.

Если вы хотите использовать Обещания, это то, что документация говорит сделать:

Вы также можете использовать node_redis с обещаниями, обещая node_redis с синей птицей как в:

var redis = require('redis');
bluebird.promisifyAll(redis.RedisClient.prototype);
bluebird.promisifyAll(redis.Multi.prototype);

Это добавит Async ко всем функции node_redis (например, return 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...