Следующий код работает в redis версии 3.1.2, но когда я обновляю библиотеку redis до 4.1.0, обратный вызов перестает работать. На локальном хосте работает сервер REDIS без пароля. Я использую узел 16 LTS.
'use strict'
import {createClient} from 'redis';
const redisClient = createClient();
redisClient.on('connect', function() {
console.info('you are now connected');
});
redisClient.on('ready', function() {
console.info('you are now ready');
});
redisClient.on('error', function(err) {
console.info(`redis error: ${err}`)
});
// added for 4.1.0 because there is no autoconnect.
await redisClient.connect();
await redisClient.set("test","value", function(err, reply) {
console.info('set complete');
});
Когда я запускаю это на клиенте Redis 3.1.2, я получаю «установить завершено» после вызова set. В клиенте Redis 4.1.0 я ничего не получаю, как будто обратный вызов не вызывается. Значение устанавливается в базе данных REDIS, даже если обратный вызов не срабатывает. Я проверил значение с помощью Redis cli. Сообщений об ошибках нет. Я получаю сообщение о подключении и готовности.
Что мне здесь не хватает? Я почти уверен, что это что-то простое, что я упускаю из виду.
В Node Redis 4.x, следуя некоторым соглашениям, было внесено множество критических изменений. Один из них заключается в том, что он использует промисы вместо обратных вызовов. Вы можете прочитать все подробности на https://github.com/redis/node-redis.
Случается с лучшими из нас! Рад, что у тебя получилось.
Спасибо! Итак, чтобы получить ключ, я бы использовал что-то вроде const myValue = await redisClient.get('myKey'). Я пробовал это раньше, но это не сработало, и вместо этого я получил пустое обещание. Однако после вашего комментария я снова посмотрел на него и понял, что забыл поставить «ожидание» перед Redis Get. Я благодарю вас за вашу помощь!