Итак, я пытаюсь создать веб-приложение, которое будет пинговать регистры устройства для хранения данных каждые 30 секунд.Обработка нескольких setinterval javascript
как вы можете видеть каждое устройство может иметь несколько регистров. Когда пользователь создает новое устройство, я повторяю все вновь созданный идентификатор регистра, который я возвращаю из своего сообщения ajax (сгенерированный идентификатор БД), а затем запускаю таймер интервала, создавая ajax-вызов каждые 30 секунд для метода, который будет пинговать мое устройство и получать данные для конкретного регистра.
Проблема, с которой я столкнулся, заключается в том, что каждый раз, когда интервал запускает мой вызов ajax, он повторно использует последний идентификатор регистра для извлечения данных вместо запуска выборки в каждом отдельном регистре. Ex. мои 2 строки имеют идентификатор 22
и 23
. Каждый раз, когда вызывается функция интервала, он будет использовать id 23
и сделать вызов ajax вместо вызова 22
, затем 23
. Это потому, что я использую for loop
при создании нового интервала?
Вот как я пытаюсь справиться с моей setInterval
:
var registers = result.register_ids;
for (var i = 0; i < registers.length; ++i) {
debugger;
var interval = setInterval(function() { fetchRegisterValues(registers[i], result.modbus_id) }, 30000);
register_ping_threads[registers[i]] = interval;
}
Вот мой Аякса вызов прочитать указанный регистр:
function fetchRegisterValues(register_id, modbus_id) {//id always ends up being 23
debugger;
$.ajax({
type: "POST",
url: "/fetch_mdata",
data: {
'csrfmiddlewaretoken': token,
'register_id': register_id, //use to read the register range
'modbus_id': modbus_id //used to get device connectiong settings
},
contentType: "application/x-www-form-urlencoded",
dataType: 'json',
success: function (result) {
debugger;
$('[data-register="' + register_id + '"]').find('[data-value=""]').text(result.value);
},
error: function (data) {
debugger;
$('#loading-icon').hide()
$('#ping_error').addClass('alert alert-danger');
$('#ping_error strong').append('Problem contacting server..');
}
});
}
ah thank you sir. Я понятия не имел об этом. Есть ли больше информации об этом в любом месте? – john
Обман, который я связал, объясняет эту концепцию. –