Я запускаю последовательность из 3 сообщений ajax, и в конце мне нужно суммировать устройства из цикла while внутри каждого цикла. Сначала я получаю идентификатор сеанса, затем я получаю количество устройств и делаю цикл foreach для получения идентификаторов каждого устройства. После этого я делаю цикл while, чтобы увеличиваться в месяц с даты начала до сегодняшнего дня и получать общее потребление и сумму месяца устройства. Мне нужно общее потребление всех месяцев потребления устройств.Javascript Return loop sum
Я прокомментировал в середине функций, где я могу суммировать, и где я получаю значение 0. Я даже попытался запустить отдельную функцию, которая находится в последнем комментарии в конце, но она продолжала возвращаться не определен.
Надеюсь, что вы сможете понять идею.
var SESSION_ID ='';
var total = parseFloat(0.0);
$.post("http://xxx.xxxxxxxx.com/users/auth", {
token : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, function (session) {
if(session) {
console.log("Session id received.");
SESSION_ID = session.id;
console.log("Looking for devices.");
$.post("http://xxx.xxxxxxxxxxxxxxx.com/devices/list", {
id : session.id
}, function (devices) {
if(devices) {
/* Loop trough devices to get id of each device */
$.each(devices, function(index, val) {
/* Set start date */
var targetDate = new Date();
targetDate.setFullYear(2015);
targetDate.setMonth(2);
targetDate.setDate(1);
targetDate.setHours(0);
targetDate.setMinutes(0);
targetDate.setSeconds(0);
var currentDate = new Date();
/* Increase 1 month until current date */
while (targetDate.getMonth() !== currentDate.getMonth() || targetDate.getFullYear() !== currentDate.getFullYear()) {
//console.log("Month: " + (targetDate.getMonth() + 1) + "; Year: " + targetDate.getFullYear());
var month = targetDate.getMonth() + 1,
year = targetDate.getFullYear();
$.post("http://xxx.xxxxxxxxxxxxxx.com/devices/" + val.id + "/consumptions?year=" + year + "&month=" + month + "&resolution=month", {
id : SESSION_ID
}, function (consumptions) {
if(consumptions) {
$.each(consumptions, function(index, val) {
/* Sum each month consumption value */
if(val.value !== '') {
total += val.value;
}
});
// Return values float values Eg.: 11774.86060142517 and keeps
console.log(total);
}
}, "json");
// Increase month
targetDate.setMonth(targetDate.getMonth() + 1);
// console.log(total) returns 0
console.log(total);
}
});
// Total returning 0
// console.log(total);
} else {
console.log("No devices found.");
}
}, "json");
} else {
console.log("No session id");
}
}, "json");
/*
function getMonthConsumption(device_id, device_year, device_month) {
$.post("http://xxx.xxxxxxxxxxxxxx.com/devices/" + device_id + "/consumptions?year=" + device_year + "&month=" + device_month + "&resolution=month", {
id : SESSION_ID
}, function (consumptions) {
if(consumptions) {
$.each(consumptions, function(index, val) {
if(val.value !== '') {
total = total + val.value;
}
});
return consumptions;
}
}, "json");
}
*/
});
Я до сих пор не могут использовать общий внешний контур. Могу ли вы сделать и пример, как я могу достичь этого, используя или обещаю. Мне нравится запускать этот цикл через 5 или 10 секунд или, может быть, минуту. – JonnyDevv
Он работал как шарм !! Большое спасибо ;) – JonnyDevv