Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Последовательность выполнения в скрипте

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    21
    1
    909

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.4k

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

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
6 Beiträge 2 Kommentatoren 1.9k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • E Offline
    E Offline
    evgeny_nd
    schrieb am zuletzt editiert von
    #1

    Начал писать скрипт для обработки импульсов с электросчетчика, натолкнулся на то что функция с 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 Antwort Letzte Antwort
    0
    • I Offline
      I Offline
      instalator
      schrieb am zuletzt editiert von
      #2

      @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, то сбрасываем до нуля }); !

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Antwort Letzte Antwort
      0
      • E Offline
        E Offline
        evgeny_nd
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        0
        • I Offline
          I Offline
          instalator
          schrieb am zuletzt editiert von
          #4

          @evgeny_nd:

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

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

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

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

          Высокий уровень Децибел вреден для здоровья!

          http://blog.instalator.ru/

          1 Antwort Letzte Antwort
          0
          • E Offline
            E Offline
            evgeny_nd
            schrieb am zuletzt editiert von
            #5

            @instalator:

            @evgeny_nd:

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

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

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

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

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

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

            1 Antwort Letzte Antwort
            0
            • I Offline
              I Offline
              instalator
              schrieb am zuletzt editiert von
              #6

              @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

              Высокий уровень Децибел вреден для здоровья!

              http://blog.instalator.ru/

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              804

              Online

              32.5k

              Benutzer

              81.6k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe