Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Последовательность выполнения в скрипте

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Последовательность выполнения в скрипте

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      evgeny_nd last edited by

      Начал писать скрипт для обработки импульсов с электросчетчика, натолкнулся на то что функция с 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.

      Не могу понять почему это происходит…

      Можете подсказать какая логика выполнения?

      1 Reply Last reply Reply Quote 0
      • I
        instalator last edited by

        @evgeny_nd:

        Начал писать скрипт для обработки импульсов с электросчетчика, натолкнулся на то что функция с 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, то сбрасываем до нуля }); !

        1 Reply Last reply Reply Quote 0
        • E
          evgeny_nd last edited by

          @instalator:

          @evgeny_nd:

          Начал писать скрипт для обработки импульсов с электросчетчика, натолкнулся на то что функция с 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а.

          1 Reply Last reply Reply Quote 0
          • I
            instalator last edited by

            @evgeny_nd:

            Да, так отрабатывает правильно.

            Но все же я не понимаю логику и почему последовательность не соблюдается. Получается если сделать как предложили вы, то весь скрипт отрабатывается функцией request. Это ведь не совсем верно?

            Я попробовал все это по расписанию запустить и получилось что тоже правильная последовательность получается только когда второй вывод в log включён в рамки requestа. `
            Javascript не ждет пока выполнится твой request.

            Так что использую колбеки.

            1 Reply Last reply Reply Quote 0
            • E
              evgeny_nd last edited by

              @instalator:

              @evgeny_nd:

              Да, так отрабатывает правильно.

              Но все же я не понимаю логику и почему последовательность не соблюдается. Получается если сделать как предложили вы, то весь скрипт отрабатывается функцией request. Это ведь не совсем верно?

              Я попробовал все это по расписанию запустить и получилось что тоже правильная последовательность получается только когда второй вывод в log включён в рамки requestа. `
              Javascript не ждет пока выполнится твой request.

              Так что использую колбеки. `
              А callback как использовать правильно?

              JavaScript только осваиваю…

              Насколько я понимаю delay использовать тоже не правильно.

              1 Reply Last reply Reply Quote 0
              • I
                instalator last edited by

                @evgeny_nd:

                @instalator:

                @evgeny_nd:

                Да, так отрабатывает правильно.

                Но все же я не понимаю логику и почему последовательность не соблюдается. Получается если сделать как предложили вы, то весь скрипт отрабатывается функцией 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

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                955
                Online

                31.6k
                Users

                79.4k
                Topics

                1.3m
                Posts

                2
                6
                1822
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo