NEWS
Последовательность выполнения в скрипте
-
Начал писать скрипт для обработки импульсов с электросчетчика, натолкнулся на то что функция с request выполняется в конце…
Т.е. этот скрипт:
var count=0;
var request = require('request');
request("http://192.168.4.12/sec/?pt=4&cmd=get", function(error, response, body) {
if(error) {
log(error); // если ошибка
}
else {
var str1 = body; // получили строку от Меги для обработки
var str2 = new Array(); //объявили массив
str2 = str1.split('/'); //занесли значения в массив (значения разделены знаком /)
count = +str2[1]; //Текущее значение счетчика, взяли второй элемент из массива (счетчик порта), преобразовав его в число
setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count);
log('1: ' + count);
}
});
log ('2: ' + count);
if (count > 500) {request("http://192.168.4.12/sec/?pt=4&cnt=0")} //Если значение счетчика на порту Меги больше 500, то сбрасываем до нуля
–----------------------------------------------------------------------
в лог выводит значения count:
20:40:12.004 [info] javascript.1 Stop script script.js.common.Электричество.Электросчетчик
20:40:12.002 [info] javascript.0 Stop script script.js.common.Электричество.Электросчетчик
20:40:12.028 [info] javascript.0 Start javascript script.js.common.Электричество.Электросчетчик
20:40:12.028 [info] javascript.0 script.js.common.Электричество.Электросчетчик: 2: 0
20:40:12.028 [info] javascript.0 script.js.common.Электричество.Электросчетчик: registered 0 subscriptions and 0 schedules
20:40:12.037 [info] javascript.0 script.js.common.Электричество.Электросчетчик: 1: 551
Т.е. вначале нижняя строчка отрабатывает, а затем верхний кусок кода.
Также переменная в объектах : setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count); не принимает значение count, а устанавливается в значение null.
Не могу понять почему это происходит…
Можете подсказать какая логика выполнения?
-
Начал писать скрипт для обработки импульсов с электросчетчика, натолкнулся на то что функция с request выполняется в конце…
Т.е. этот скрипт:
var count=0;
var request = require('request');
request("http://192.168.4.12/sec/?pt=4&cmd=get", function(error, response, body) {
if(error) {
log(error); // если ошибка
}
else {
var str1 = body; // получили строку от Меги для обработки
var str2 = new Array(); //объявили массив
str2 = str1.split('/'); //занесли значения в массив (значения разделены знаком /)
count = +str2[1]; //Текущее значение счетчика, взяли второй элемент из массива (счетчик порта), преобразовав его в число
setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count);
log('1: ' + count);
}
});
log ('2: ' + count);
if (count > 500) {request("http://192.168.4.12/sec/?pt=4&cnt=0")} //Если значение счетчика на порту Меги больше 500, то сбрасываем до нуля
–----------------------------------------------------------------------
в лог выводит значения count:
20:40:12.004 [info] javascript.1 Stop script script.js.common.Электричество.Электросчетчик
20:40:12.002 [info] javascript.0 Stop script script.js.common.Электричество.Электросчетчик
20:40:12.028 [info] javascript.0 Start javascript script.js.common.Электричество.Электросчетчик
20:40:12.028 [info] javascript.0 script.js.common.Электричество.Электросчетчик: 2: 0
20:40:12.028 [info] javascript.0 script.js.common.Электричество.Электросчетчик: registered 0 subscriptions and 0 schedules
20:40:12.037 [info] javascript.0 script.js.common.Электричество.Электросчетчик: 1: 551
Т.е. вначале нижняя строчка отрабатывает, а затем верхний кусок кода.
Также переменная в объектах : setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count); не принимает значение count, а устанавливается в значение null.
Не могу понять почему это происходит…
Можете подсказать какая логика выполнения? `
!
var count=0; var request = require('request'); ! request("http://192.168.4.12/sec/?pt=4&cmd=get", function(error, response, body) { if(error) { log(error); // если ошибка } else { var str1 = body; // получили строку от Меги для обработки var str2 = new Array(); //объявили массив str2 = str1.split('/'); //занесли значения в массив (значения разделены знаком /) count = +str2[1]; //Текущее значение счетчика, взяли второй элемент из массива (счетчик порта), преобразовав его в число setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count); log('1: ' + count); } log ('2: ' + count); if (count > 500) {request("http://192.168.4.12/sec/?pt=4&cnt=0")} //Если значение счетчика на порту Меги больше 500, то сбрасываем до нуля }); !
-
Начал писать скрипт для обработки импульсов с электросчетчика, натолкнулся на то что функция с request выполняется в конце…
Т.е. этот скрипт:
var count=0;
var request = require('request');
request("http://192.168.4.12/sec/?pt=4&cmd=get", function(error, response, body) {
if(error) {
log(error); // если ошибка
}
else {
var str1 = body; // получили строку от Меги для обработки
var str2 = new Array(); //объявили массив
str2 = str1.split('/'); //занесли значения в массив (значения разделены знаком /)
count = +str2[1]; //Текущее значение счетчика, взяли второй элемент из массива (счетчик порта), преобразовав его в число
setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count);
log('1: ' + count);
}
});
log ('2: ' + count);
if (count > 500) {request("http://192.168.4.12/sec/?pt=4&cnt=0")} //Если значение счетчика на порту Меги больше 500, то сбрасываем до нуля
–----------------------------------------------------------------------
в лог выводит значения count:
20:40:12.004 [info] javascript.1 Stop script script.js.common.Электричество.Электросчетчик
20:40:12.002 [info] javascript.0 Stop script script.js.common.Электричество.Электросчетчик
20:40:12.028 [info] javascript.0 Start javascript script.js.common.Электричество.Электросчетчик
20:40:12.028 [info] javascript.0 script.js.common.Электричество.Электросчетчик: 2: 0
20:40:12.028 [info] javascript.0 script.js.common.Электричество.Электросчетчик: registered 0 subscriptions and 0 schedules
20:40:12.037 [info] javascript.0 script.js.common.Электричество.Электросчетчик: 1: 551
Т.е. вначале нижняя строчка отрабатывает, а затем верхний кусок кода.
Также переменная в объектах : setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count); не принимает значение count, а устанавливается в значение null.
Не могу понять почему это происходит…
Можете подсказать какая логика выполнения? `
!
var count=0; var request = require('request'); ! request("http://192.168.4.12/sec/?pt=4&cmd=get", function(error, response, body) { if(error) { log(error); // если ошибка } else { var str1 = body; // получили строку от Меги для обработки var str2 = new Array(); //объявили массив str2 = str1.split('/'); //занесли значения в массив (значения разделены знаком /) count = +str2[1]; //Текущее значение счетчика, взяли второй элемент из массива (счетчик порта), преобразовав его в число setState("den.0.Электричество.Электросчетчик.Счетчик_МегаД_текущее_значение",count); log('1: ' + count); } log ('2: ' + count); if (count > 500) {request("http://192.168.4.12/sec/?pt=4&cnt=0")} //Если значение счетчика на порту Меги больше 500, то сбрасываем до нуля }); !
`
Да, так отрабатывает правильно.Но все же я не понимаю логику и почему последовательность не соблюдается. Получается если сделать как предложили вы, то весь скрипт отрабатывается функцией request. Это ведь не совсем верно?
Я попробовал все это по расписанию запустить и получилось что тоже правильная последовательность получается только когда второй вывод в log включён в рамки requestа.
-
Да, так отрабатывает правильно.
Но все же я не понимаю логику и почему последовательность не соблюдается. Получается если сделать как предложили вы, то весь скрипт отрабатывается функцией request. Это ведь не совсем верно?
Я попробовал все это по расписанию запустить и получилось что тоже правильная последовательность получается только когда второй вывод в log включён в рамки requestа. `
Javascript не ждет пока выполнится твой request.Так что использую колбеки.
-
Да, так отрабатывает правильно.
Но все же я не понимаю логику и почему последовательность не соблюдается. Получается если сделать как предложили вы, то весь скрипт отрабатывается функцией request. Это ведь не совсем верно?
Я попробовал все это по расписанию запустить и получилось что тоже правильная последовательность получается только когда второй вывод в log включён в рамки requestа. `
Javascript не ждет пока выполнится твой request.Так что использую колбеки. `
А callback как использовать правильно?JavaScript только осваиваю…
Насколько я понимаю delay использовать тоже не правильно.
-
Да, так отрабатывает правильно.
Но все же я не понимаю логику и почему последовательность не соблюдается. Получается если сделать как предложили вы, то весь скрипт отрабатывается функцией request. Это ведь не совсем верно?
Я попробовал все это по расписанию запустить и получилось что тоже правильная последовательность получается только когда второй вывод в log включён в рамки requestа. `
Javascript не ждет пока выполнится твой request.Так что использую колбеки. `
А callback как использовать правильно?JavaScript только осваиваю…
Насколько я понимаю delay использовать тоже не правильно. `
request("http://192.168.4.12/sec/?pt=4&cmd=get", function(error, response, body) {
тут function(error, response, body) это и есть колбек, т.е. request вернул (error, response, body).
delay нет, используй setTimeout