Использую редис совместно с Нодой. Логика такая - редис возвращает на запрос урл данные, если они хранятся в нем, если нет, то совершается запрос axios, данные возвращаются и сохраняются в самом редис, для того чтобы дальше их использовать. Нижеприведенный код не работает, возвращает просто true. Где закралась ошибка?
const cat = axios('http://localhost:3001/cat')
.then((response) => {
return response.data
})
.catch(error => error)
const dog = client.get('http://localhost:3002/dog', function (error, dog) {
if (error) { throw error }
if (dog) {
return JSON.parse(dog)
} else {
axios('http://localhost:3002/dog')
.then((response) => {
return response.data
client.set('http://localhost:3002/dog', JSON.stringify(response.data), function (error) {
if (error) { throw error }
})
})
.catch(error => error)
}
})
Promise.all([cat, dog])
.then((pets) => {
console.log(pets)
const cats = pets[0]
const dogs = pets[1]
res.json({
results: {
cats,
dogs
}
})
})
.catch((err) => {
res.json({
error: err
})
})
UPD. Провел тест, вывел в консоль это
const test = client.get('test')
вернулось тоже
true! В redis-cli возвращает фразу, как положено. Получается, проблема может быть где-то в другом месте? Первый день с редис, прошу помощи.
UPD #2. Проверив в redis-cli
get "http://localhost:3002/dog"
я увидел, что данные уже в редис! Т.е. сработал client.set. Почему же не работает client.get? Я могу использовать const и возращать значение? ПРоблема в этом? Как переписать? Ничего в голову не приходит.