У меня есть node js redis api, где я читаю данные из redis на основе ключа, а если нет, извлекаю их из другого API, а затем вставляю эти данные в Redis. Также я помещаю эти данные в переменную и в конце foreach хочу вернуть это значение конечному пользователю.
Проблема в том, что Redis работает асинхронно, и в результате моя переменная данных всегда пуста. Как мне обойти это?
Вот соответствующая часть моего кода
between.forEach(function(entry) {
asyncTasks.push(function(callback){
client.exists(id+entry, function(err, reply) {
if (reply === 1) {
client.get(id+entry, function(err, reply) {
var output = JSON.parse(reply);
data_output = data_output.concat(output);
});
} else {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var slot_url = "https://" + username + ":" + password + "@testapi.foobar.com/1/timeslots?productId=" + id + "&fromDate=" + entry + "&toDate=" + entry;
request({
url: slot_url,
json: true,
headers: headers
}, function(error, response, body) {
if (!error && response.statusCode === 200) {
var data = [];
try {
var temp = {};
console.log(body);
body.data.forEach(function(tempslots) {
temp['date'] = tempslots['date'];
temp['timeslots'] = tempslots['timeslots'];
data = data.concat(temp);
});
client.set(id+entry, JSON.stringify(data));
data_output = data_output.concat(data);
} catch (err) {
console.log(err.message);
}
} else {
console.log("Something went wrong!! " + error.message);
}
})
}
callback();
});
});
});
async.parallel(asyncTasks, function(){
// All tasks are done now
result['data'] = data_output;
result['response'] = 1;
result['message'] = 'vacancies list fetched successfully!';
res.json(result);
});
});
вывод всегда такой {"data":[],"response":1,"message":"Capacity list fetched successfully!"}
, хотя я проверил, что код правильно извлекает и вставляет данные в Redis