Сначала обратите внимание на второй функциональный блок, чтобы лучше понять.
Так что в основном у меня есть большой массив «тегов» (переменных), которые повторяются в выражении «for (let tag of tagArray) {...}». Значения каждого из этих «тегов» запрашиваются сервером асинхронно по адресу «tagFunctionality.addGenericTag (tag.watchTag, function (value) {...}».
Поскольку я получаю много данных, этот процесс может стать довольно медленным; для повышения эффективности я предложил отменить запросы, которые, как я знаю, будут возвращать ноль. Приблизительно после ~ 1000 значений значения обратного вызова начинают обнуляться в больших чанках, поэтому я предполагаю, что могу игнорировать эти чанки и просто по умолчанию установить ноль вместо интерпретации нулевого значения с сервера, что приводит к более быстрому времени завершения. В настоящее время я вынужден перебирать каждое значение и ждать, пока сервер вернет каждое значение, прежде чем продолжить. Как я могу успешно прекратить получать определенные асинхронные вызовы или что-то подобное / более эффективное?
(См. Мою частичную попытку в комментарии "МОЕ ПОСЛЕДНЕЕ ИЗДАНИЕ".)
Функция 1:
var repetitionLog = [];
var addGenericTag = function(tag, callback) {
// this spot runs before bulk data is received
currentSession.readVariableValue("ns=2;s=" + tag, function(err, dataValue) {
// this spot runs after bulk data is received
if (dataValue && dataValue.value) {
// MY RECENT EDITION: Detect chain of zeros
if (dataValue.value.value == 0) {
repetitionLog.push(dataValue.value.value)
// console.log(repetitionLog.length);
if (repetitionLog.length >= 1000) {
// this spot runs if 1000 zeros have been returned
// skip the next 100 callbacks and reset the repetition log or something
}
}
callback(dataValue.value.value);
} else {
callback(null);
}
});
}
Функция 2:
var tagArray = []; // pretend this array is full of tags
var generateTagSystem = function(tagArray) {
var tagSystem = function() {
// Connect to this server
tagFunctionality.connect(function() {
// Subscribe to created session
tagFunctionality.start();
// IMPORTANT BIT, iterates over thousands of tags
for (let tag of tagArray) {
// Request value object of a particular tag
tagFunctionality.addGenericTag(tag.watchTag, function(value) {
// Tag is empty
if (value === null) {
// Tag value is empty, error code
// Tag is not empty or zero
} else if (value != 0) {
// Do something with tag code
// Tag is zero
} else {
// possibly useful future spot
}
});
}
});
};
tagSystem();
};