Je crée un service API nodejs et redis, j'ai écrit le code ci-dessous pour trouver des dates individuelles dans une plage de dates, puis obtenir l'intervalle de temps de chaque date et le stocker dans redis.Comportement étrange pour les nœuds
Le problème est que je fais un console.log("Keys :"+key)
à l'intérieur d'un forEach et que je vérifie les clés dans le même forEach mais pour une raison quelconque, la boucle exécute des fonctions individuelles séparément.
Je joins la sortie de code et la console pour mieux expliquer le problème
//API to get slot for a particular date range
app.get('/listcapacity/:ticketid/:fromdate/:todate', function(req, res) {
var id = req.params.ticketid;
var fromdate = req.params.fromdate;
var todate = req.params.todate;
var key = null;
var username = 'foo';
var password = 'foobar';
var result = {};
var data_output = [];
var currentDate = new Date(fromdate);
var between = [];
var end = new Date(todate);
while (currentDate <= end) {
var tempdate = new Date(currentDate).toISOString();
var dump = tempdate.toString().split("T");
between.push(dump[0]);
currentDate.setDate(currentDate.getDate() + 1);
}
between.forEach(function(entry) {
key = id+entry+"list";
console.log("Keys: " + key);
client.exists(key, function(err, reply) {
if (reply === 1) {
console.log("Key : " + key + " Found");
client.get(key, function(err, reply) {
var output = JSON.parse(reply);
data_output = data_output.concat(output);
});
} else {
console.log("Key : " + key + " Not Found");
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 = {};
body.data.forEach(function(tempslots) {
temp['date'] = tempslots['date'];
temp['timeslots'] = tempslots['timeslots'];
data = data.concat(temp);
});
client.set(key, JSON.stringify(data));
data_output = data_output.concat(data);
} catch (err) {
console.log(err.message);
}
} else {
console.log("Something went wrong!! " + error.message);
}
})
}
});
});
result['data'] = data_output;
result['response'] = 1;
result['message'] = 'Capacity list fetched successfully!';
res.json(result);
});
Et voici la sortie de la console
Keys: 5212016-10-01list
Keys: 5212016-10-02list
Keys: 5212016-10-03list
Keys: 5212016-10-04list
Keys: 5212016-10-05list
Key : 5212016-10-05list Not Found
Key : 5212016-10-05list Not Found
Key : 5212016-10-05list Not Found
Key : 5212016-10-05list Not Found
Key : 5212016-10-05list Found
Comme vous pouvez voir la valeur des clés lors de la vérification avec Redis est seulement obtenir la dernière valeur où comme dans la même boucle quand je définis les clés, il a la valeur correcte comme est imprimé dans la console