Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Array mit Funktionsreferenzen in Objekt speichern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Array mit Funktionsreferenzen in Objekt speichern

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

      Ich versuche ein Array mit Funktionsreferenzen in einem Objekt zu speichern, allerdings werden in dem Objekt nur leere Felder angelegt. Muss ich dabei etwas beachten?

      function testFnc1()
      {}
      function testFnc2()
      {}
      
      createState(
              'ActiveRoomsTimeCtrl', { name: 'Räume mit Zeitsteuerung', type: 'array', role:"state"}, 
               function (obj) {prepareArrayRooms()}
          );
      }
      
      function prepareArrayRooms()
      {
          if(null == getState('ActiveRoomsTimeCtrl').val)
          {   
              var init = [testFnc1, testFnc2];
              setState('ActiveRoomsTimeCtrl', init, true);
          }
      }
      

      In der ObjectView wird allerdings nur ein leeres Array angezeigt. Die leeren Felder erhalte ich auch, wenn ich das Objekt wieder auslesen will.
      d47396d4-932d-4bba-a2fa-bdf99fd9b1ca-image.png

      Background: Ich möchte, je nach selektierten Buttons (Räumen) in vis, Funktionen stündlich aufrufen. Dafür möchte ich die Funktionen in ein array ein-/austragen und dieses Array stündlich durchgehen und die Funktionen aufrufen.

      schedule("01 * * * *", timerCallback);
      function timerCallback()
      {
          var activeRooms = getState('ActiveRoomsTimeCtrl').val;
          activeRooms.forEach(function(element) {
              if (element != 0)
              {
                  element();
              }
          });
      }
      
      1 Reply Last reply Reply Quote 0
      • S
        steeffan last edited by

        Ich habe die Ursache für das Problem in der Doku gefunden:
        "val - the actual value - can be any type that is JSON-"encodable""
        Funktionen sind nicht in JSON codierbar.

        Ich werde somit eine andere Lösung suchen.

        1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer last edited by

          Eine einfach Lösung wäre die Funktion als string zu übergeben und dann über

          switch(func){
          case 'set1': set1(args); break;
          case 'get1': return get1(); break;
          }
          

          die entsprechende Funktion aufzurufen.

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

          Support us

          ioBroker
          Community Adapters
          Donate

          793
          Online

          31.7k
          Users

          79.8k
          Topics

          1.3m
          Posts

          2
          3
          205
          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