J'ai un nœud js redis api où je lis les données de redis basé sur la clé et si présent pas le chercher d'une autre API, puis en insérant ces données dans redis. Aussi je pousse ces données dans une variable et à la fin de la foreach je veux renvoyer cette valeur à l'utilisateur final.insérer des données dans le tableau de redis à l'intérieur d'un foreach dans le noeud js
Le problème est que redis fonctionne en asynchrone et, par conséquent, ma variable de données est toujours vide. Comment puis-je contourner cela?
Voici la partie pertinente de mon code
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);
});
});
la sortie est toujours comme ça {"data":[],"response":1,"message":"Capacity list fetched successfully!"}
même si j'ai vérifié que le code est Beau et l'insertion de données correctement dans Redis
Comme nous le savons noeud js async pour que votre travail foreach puis vos Radis données seront être défini .so la sortie de données est vide –
@HimanshuGoyal Je le sais déjà, j'ai même utilisé async.parallel pour sortir de ce problème mais ça ne marchera toujours pas. Si possible, plz donner une solution –
Vous pouvez utiliser la promesse http://stackoverflow.com/questions/25429522/q-promise-nodejs-how-to-resolve-in-loop –