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. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst]Timingprobleme bei createState und setState im selben Skript

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    329

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

[gelöst]Timingprobleme bei createState und setState im selben Skript

Geplant Angeheftet Gesperrt Verschoben JavaScript
37 Beiträge 6 Kommentatoren 5.2k Aufrufe 5 Watching
  • Ä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.
  • AlCalzoneA AlCalzone

    @Fitti:

    Ich frage mich also, wie ein Adapter das löst? `
    Ich überprüfe in der Regel dann wenn ein Objekt/State aktualisiert werden muss, ob er schon existiert und lege ihn ansonsten vor dem Schreiben an.

    Du kannst deine klassische "Init => Programm"-Struktur aber folgendermaßen nachbilden (schematisch, ungetestet). Die "…" musst du noch an deine Ansprüche anpassen:

    // Einmalig beim Programmstart alle States erzeugen, sofern nicht schon geschehen
    var states = [
      {id: "stateID1", initial: "Initialwert1", ...sonstiges},
      {id: "stateID2", initial: "Initialwert1", ...sonstiges}
    ];
    var numStates = states.length;
    states.each(function(state) {
    	createState(state.id, state.initial, ..., function() {
    		numStates--;
    		if (numStates === 0) {
    			// fertig!
    			main();
    		}
    	});
    });
    
    function main() {
        // hier der eigentliche Programmablauf
    }
    
    

    Ein fixer Timeout ist nicht zu empfehlen, für den Programmfluss sind die Callbacks in NodeJS nämlich da.

    P Offline
    P Offline
    Pittini
    Developer
    schrieb am zuletzt editiert von Pittini
    #9

    @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

    Du kannst deine klassische "Init => Programm"-Struktur aber folgendermaßen nachbilden (schematisch, ungetestet). Die "…" musst du noch an deine Ansprüche anpassen:

    Ich weis, altes Thema, aber für mich grade topaktuell und ich stell mich zu blöd an, das anzupassen.
    Grundsätzlich werden die States angelegt, aber nichts aus dem "common" Bereich (name/read/write/def/usw.).
    Vieleicht mag @AlCalzone mal nen kurzen Blick drauf werfen.

    PS: Wenn ich Zeile 29 ändere, von:

        createState(state.id, state.initial, state.forceCreation,  function () {
    

    zu

        createState(state.id, state.initial, state.forceCreation, state.common, function () {
    

    werden zumindest die default Werte angelegt. Aber das state.common hat nen roten Kringel und der Name ist vollkommen falsch, nämlich die ID und nicht was in name definiert wurde.

    switch (ProfileType) {
        case "Mo - Su":
            y = 0;
            for (let x = 0; x <= NumberOfPeriods - 1; x++) {
                states[y] = { id: praefix + "ProfileTypes.Mo-Su.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
                y++
                states[y] = { id: praefix + "ProfileTypes.Mo-Su.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" };
                y++
            };
            break;
    
        //V2 Mo-Fr / Sa-So
        case "Mo - Fr / Sa - Su":
            y = 0;
            for (let x = 0; x <= NumberOfPeriods - 1; x++) {
                states[y] = { id: praefix + "ProfileTypes.Mo-Fr.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
                y++
                states[y] = { id: praefix + "ProfileTypes.Mo-Fr.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" };
                y++
                states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
                y++
                states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" };
                y++
            };
            break;
    };
    let numStates = states.length;
    states.forEach(function (state) {
        createState(state.id, state.initial, state.forceCreation,  function () {
            numStates--;
            if (numStates === 0) {
                log("fertig!");
                //main();
            }
        });
    });
    
    
    C 1 Antwort Letzte Antwort
    0
    • P Pittini

      @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

      Du kannst deine klassische "Init => Programm"-Struktur aber folgendermaßen nachbilden (schematisch, ungetestet). Die "…" musst du noch an deine Ansprüche anpassen:

      Ich weis, altes Thema, aber für mich grade topaktuell und ich stell mich zu blöd an, das anzupassen.
      Grundsätzlich werden die States angelegt, aber nichts aus dem "common" Bereich (name/read/write/def/usw.).
      Vieleicht mag @AlCalzone mal nen kurzen Blick drauf werfen.

      PS: Wenn ich Zeile 29 ändere, von:

          createState(state.id, state.initial, state.forceCreation,  function () {
      

      zu

          createState(state.id, state.initial, state.forceCreation, state.common, function () {
      

      werden zumindest die default Werte angelegt. Aber das state.common hat nen roten Kringel und der Name ist vollkommen falsch, nämlich die ID und nicht was in name definiert wurde.

      switch (ProfileType) {
          case "Mo - Su":
              y = 0;
              for (let x = 0; x <= NumberOfPeriods - 1; x++) {
                  states[y] = { id: praefix + "ProfileTypes.Mo-Su.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
                  y++
                  states[y] = { id: praefix + "ProfileTypes.Mo-Su.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" };
                  y++
              };
              break;
      
          //V2 Mo-Fr / Sa-So
          case "Mo - Fr / Sa - Su":
              y = 0;
              for (let x = 0; x <= NumberOfPeriods - 1; x++) {
                  states[y] = { id: praefix + "ProfileTypes.Mo-Fr.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
                  y++
                  states[y] = { id: praefix + "ProfileTypes.Mo-Fr.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" };
                  y++
                  states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
                  y++
                  states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" };
                  y++
              };
              break;
      };
      let numStates = states.length;
      states.forEach(function (state) {
          createState(state.id, state.initial, state.forceCreation,  function () {
              numStates--;
              if (numStates === 0) {
                  log("fertig!");
                  //main();
              }
          });
      });
      
      
      C Offline
      C Offline
      CruziX
      schrieb am zuletzt editiert von
      #10

      @Pittini Du gibst den erzeugten states, so wie ich das sehe auch kein common attribut?
      Wo setzt du bsp. hierbei das attribut common, auf das du dann zugreifen möchtest?

      states[y] = { id: praefix + "ProfileTypes.Mo-Su.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
      

      state.id, state.initial und state.forceCreation gehen, weil du den Objekten diese Eigenschaften gegeben hast.

      P 1 Antwort Letzte Antwort
      0
      • C CruziX

        @Pittini Du gibst den erzeugten states, so wie ich das sehe auch kein common attribut?
        Wo setzt du bsp. hierbei das attribut common, auf das du dann zugreifen möchtest?

        states[y] = { id: praefix + "ProfileTypes.Mo-Su.Periods." + x + ".Temperature", initial: 20, forceCreation: false, read: true, write: true, name: "target temperature", type: "number", def: 20 };
        

        state.id, state.initial und state.forceCreation gehen, weil du den Objekten diese Eigenschaften gegeben hast.

        P Offline
        P Offline
        Pittini
        Developer
        schrieb am zuletzt editiert von Pittini
        #11

        @CruziX
        Ich steh grad aufm Schlauch, was meinst Du? Beim normalen createState muß ich doch common auch ned separat definieren?
        Aber Versuch macht kluch, ich habs mal probiert, jetzt wird alles korrekt angelegt, aber nu mault er state.forceCreation an.

        AlCalzoneA 1 Antwort Letzte Antwort
        0
        • P Pittini

          @CruziX
          Ich steh grad aufm Schlauch, was meinst Du? Beim normalen createState muß ich doch common auch ned separat definieren?
          Aber Versuch macht kluch, ich habs mal probiert, jetzt wird alles korrekt angelegt, aber nu mault er state.forceCreation an.

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von AlCalzone
          #12

          @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

          Ich steh grad aufm Schlauch, was meinst Du? Beim normalen createState muß ich doch common auch ned separat definieren?

          Wenn du willst, dass deine States nachher bestimmte common-Eigenschaften (z.B. Name) haben, musst du das beim createState mitgeben. Wie soll createState sonst wissen können, was du da für Eigenschaften haben willst?

          Ändere mal deine Objektdefinitionen von z.B.

          states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" }
          

          zu

          states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, common: { read: true, write: true, name: "period from", type: "string", def: " 00:00" } }
          

          (also alles innerhalb common in ein Objekt gruppieren), dann sollte es auch mit dem createState inklusive common klappen.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          P C 2 Antworten Letzte Antwort
          0
          • AlCalzoneA AlCalzone

            @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

            Ich steh grad aufm Schlauch, was meinst Du? Beim normalen createState muß ich doch common auch ned separat definieren?

            Wenn du willst, dass deine States nachher bestimmte common-Eigenschaften (z.B. Name) haben, musst du das beim createState mitgeben. Wie soll createState sonst wissen können, was du da für Eigenschaften haben willst?

            Ändere mal deine Objektdefinitionen von z.B.

            states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" }
            

            zu

            states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, common: { read: true, write: true, name: "period from", type: "string", def: " 00:00" } }
            

            (also alles innerhalb common in ein Objekt gruppieren), dann sollte es auch mit dem createState inklusive common klappen.

            P Offline
            P Offline
            Pittini
            Developer
            schrieb am zuletzt editiert von
            #13

            @AlCalzone
            Jap, so funktioniert das, besten DAnk. Allerdings passt ihm jetzt state.forceCreation nicht. Was hab ich da noch falsch?

            2020-03-05 17_21_09-javascript - ioBroker.png

            C 1 Antwort Letzte Antwort
            0
            • AlCalzoneA AlCalzone

              @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

              Ich steh grad aufm Schlauch, was meinst Du? Beim normalen createState muß ich doch common auch ned separat definieren?

              Wenn du willst, dass deine States nachher bestimmte common-Eigenschaften (z.B. Name) haben, musst du das beim createState mitgeben. Wie soll createState sonst wissen können, was du da für Eigenschaften haben willst?

              Ändere mal deine Objektdefinitionen von z.B.

              states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" }
              

              zu

              states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, common: { read: true, write: true, name: "period from", type: "string", def: " 00:00" } }
              

              (also alles innerhalb common in ein Objekt gruppieren), dann sollte es auch mit dem createState inklusive common klappen.

              C Offline
              C Offline
              CruziX
              schrieb am zuletzt editiert von
              #14

              @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

              @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

              Ich steh grad aufm Schlauch, was meinst Du? Beim normalen createState muß ich doch common auch ned separat definieren?

              Wenn du willst, dass deine States nachher bestimmte common-Eigenschaften (z.B. Name) haben, musst du das beim createState mitgeben. Wie soll createState sonst wissen können, was du da für Eigenschaften haben willst?

              Ändere mal deine Objektdefinitionen von z.B.

              states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, read: true, write: true, name: "period from", type: "string", def: " 00:00" }
              

              zu

              states[y] = { id: praefix + "ProfileTypes.Sa-So.Periods." + x + ".time", initial: "00:00", forceCreation: false, common: { read: true, write: true, name: "period from", type: "string", def: " 00:00" } }
              

              (also alles innerhalb common in ein Objekt gruppieren), dann sollte es auch mit dem createState inklusive common klappen.

              Jep, genau das meinte ich ^^

              1 Antwort Letzte Antwort
              0
              • P Pittini

                @AlCalzone
                Jap, so funktioniert das, besten DAnk. Allerdings passt ihm jetzt state.forceCreation nicht. Was hab ich da noch falsch?

                2020-03-05 17_21_09-javascript - ioBroker.png

                C Offline
                C Offline
                CruziX
                schrieb am zuletzt editiert von
                #15

                @Pittini zeig doch nochmal bitte das setzen der states

                P 1 Antwort Letzte Antwort
                0
                • C CruziX

                  @Pittini zeig doch nochmal bitte das setzen der states

                  P Offline
                  P Offline
                  Pittini
                  Developer
                  schrieb am zuletzt editiert von
                  #16

                  @CruziX

                  states[y] = { id: praefix + "ProfileTypes.Sun.Periods." + x + ".time", initial: "00:00", forceCreation: false, common: { read: true, write: true, name: "period from", type: "string", def: " 00:00" } }; // 
                  
                  
                      createState(state.id, state.initial, state.forceCreation, state.common, function () {
                  
                  
                  C 1 Antwort Letzte Antwort
                  0
                  • P Pittini

                    @CruziX

                    states[y] = { id: praefix + "ProfileTypes.Sun.Periods." + x + ".time", initial: "00:00", forceCreation: false, common: { read: true, write: true, name: "period from", type: "string", def: " 00:00" } }; // 
                    
                    
                        createState(state.id, state.initial, state.forceCreation, state.common, function () {
                    
                    
                    C Offline
                    C Offline
                    CruziX
                    schrieb am zuletzt editiert von
                    #17

                    @Pittini funktioniert es denn trotzdem? Habe in meinen Srkipts auch manchmal was rot aber es geht

                    P 1 Antwort Letzte Antwort
                    0
                    • C CruziX

                      @Pittini funktioniert es denn trotzdem? Habe in meinen Srkipts auch manchmal was rot aber es geht

                      P Offline
                      P Offline
                      Pittini
                      Developer
                      schrieb am zuletzt editiert von
                      #18

                      @CruziX sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                      funktioniert es denn trotzdem? Habe in meinen Srkipts auch manchmal was rot aber es geht

                      Ja, hab ich oben ja geschrieben dass es funktioniert. Und ja, ich kenn das auch mit den roten Kringeln gelegntlich, aber meist sind die immer da und kommen nicht erst wenn mans richtig macht.

                      AlCalzoneA 1 Antwort Letzte Antwort
                      0
                      • P Pittini

                        @CruziX sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                        funktioniert es denn trotzdem? Habe in meinen Srkipts auch manchmal was rot aber es geht

                        Ja, hab ich oben ja geschrieben dass es funktioniert. Und ja, ich kenn das auch mit den roten Kringeln gelegntlich, aber meist sind die immer da und kommen nicht erst wenn mans richtig macht.

                        AlCalzoneA Offline
                        AlCalzoneA Offline
                        AlCalzone
                        Developer
                        schrieb am zuletzt editiert von
                        #19

                        @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                        meist sind die immer da und kommen nicht erst wenn mans richtig macht.

                        Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind. Eigentlich sollten die auf Fehler hinweisen.
                        Z.B. was kommt beim ForceCreation-Fehler wenn du mit der Maus drüber gehst?

                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                        P 2 Antworten Letzte Antwort
                        0
                        • AlCalzoneA AlCalzone

                          @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                          meist sind die immer da und kommen nicht erst wenn mans richtig macht.

                          Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind. Eigentlich sollten die auf Fehler hinweisen.
                          Z.B. was kommt beim ForceCreation-Fehler wenn du mit der Maus drüber gehst?

                          P Offline
                          P Offline
                          Pittini
                          Developer
                          schrieb am zuletzt editiert von
                          #20

                          @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                          Z.B. was kommt beim ForceCreation-Fehler wenn du mit der Maus drüber gehst?

                          2020-03-06 08_36_34-javascript - ioBroker.png

                          AlCalzoneA 1 Antwort Letzte Antwort
                          0
                          • AlCalzoneA AlCalzone

                            @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                            meist sind die immer da und kommen nicht erst wenn mans richtig macht.

                            Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind. Eigentlich sollten die auf Fehler hinweisen.
                            Z.B. was kommt beim ForceCreation-Fehler wenn du mit der Maus drüber gehst?

                            P Offline
                            P Offline
                            Pittini
                            Developer
                            schrieb am zuletzt editiert von Pittini
                            #21

                            @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                            Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind.

                            Z.b. bei mehrdimensionalen Array mault er fast immer.
                            2020-03-06 09_00_16-javascript - ioBroker.png

                            siehe auch hier:
                            2020-03-06 09_20_21-javascript - ioBroker.png
                            Oder hier mault er die enumNames an:
                            2020-03-06 08_59_58-javascript - ioBroker.png

                            Alle Beispiele sind aus Skripts die einwandfrei funktionieren.

                            AlCalzoneA 1 Antwort Letzte Antwort
                            0
                            • C Offline
                              C Offline
                              CruziX
                              schrieb am zuletzt editiert von
                              #22

                              Wenn ich zu Hause bin geb ich hier auch mal ein paar Beispiele.
                              Was mir direkt einfällt.
                              In einem Global Skript erweiter ich die Klasse Date um eine function.

                              Date.diffBetween =

                              Und in skripten wo ich da verwende, wird diese Funktion auch als Fehler angemerkt

                              AlCalzoneA 1 Antwort Letzte Antwort
                              0
                              • P Pittini

                                @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                                Dann schick mir bitte mal ein paar Beispiele wo du denkst dass sie nicht angebracht sind.

                                Z.b. bei mehrdimensionalen Array mault er fast immer.
                                2020-03-06 09_00_16-javascript - ioBroker.png

                                siehe auch hier:
                                2020-03-06 09_20_21-javascript - ioBroker.png
                                Oder hier mault er die enumNames an:
                                2020-03-06 08_59_58-javascript - ioBroker.png

                                Alle Beispiele sind aus Skripts die einwandfrei funktionieren.

                                AlCalzoneA Offline
                                AlCalzoneA Offline
                                AlCalzone
                                Developer
                                schrieb am zuletzt editiert von AlCalzone
                                #23

                                @Pittini Ok, das sind beides Beispiele, die sich nicht unbedingt beheben lassen. Beim Array zum Beispiel ändert sich durch die Zuweisung der Typ - das mag die Typprüfung nicht, auch wenn es valide ist.

                                Bei Funktionsaufrufen solltest du aber relativ safe sein, dass wenn etwas gemeckert wird, es wirklich nicht stimmt.

                                Das Beispiel mit forceCreate muss ich mir mal anschauen, scheint erst mal unplausibel.

                                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                1 Antwort Letzte Antwort
                                0
                                • C CruziX

                                  Wenn ich zu Hause bin geb ich hier auch mal ein paar Beispiele.
                                  Was mir direkt einfällt.
                                  In einem Global Skript erweiter ich die Klasse Date um eine function.

                                  Date.diffBetween =

                                  Und in skripten wo ich da verwende, wird diese Funktion auch als Fehler angemerkt

                                  AlCalzoneA Offline
                                  AlCalzoneA Offline
                                  AlCalzone
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #24

                                  @CruziX sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                                  In einem Global Skript erweiter ich die Klasse Date um eine function.

                                  Ok, noch ein Spezialfall. Dazu müsste man auch die Definition der Klasse ergänzen, damit die Typprüfung das versteht.

                                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                  C 1 Antwort Letzte Antwort
                                  0
                                  • AlCalzoneA AlCalzone

                                    @CruziX sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                                    In einem Global Skript erweiter ich die Klasse Date um eine function.

                                    Ok, noch ein Spezialfall. Dazu müsste man auch die Definition der Klasse ergänzen, damit die Typprüfung das versteht.

                                    C Offline
                                    C Offline
                                    CruziX
                                    schrieb am zuletzt editiert von
                                    #25

                                    @AlCalzone Was genau ist daran ein Spezialfall, dass sich die Funktion im global Skript befindet?

                                    AlCalzoneA 1 Antwort Letzte Antwort
                                    0
                                    • C CruziX

                                      @AlCalzone Was genau ist daran ein Spezialfall, dass sich die Funktion im global Skript befindet?

                                      AlCalzoneA Offline
                                      AlCalzoneA Offline
                                      AlCalzone
                                      Developer
                                      schrieb am zuletzt editiert von
                                      #26

                                      @CruziX Ne, dass du eingebaute Funktionalität erweiterst. Unter der Haube verwendet die Typprüfung TypeScript und weiß, was die eingebauten Sachen (z.B. die Date-Klasse) normalerweise kann.
                                      Der Typprüfung beizubringen, dass du diese Funktionalität erweitert hast, ist tricky. Da ist es IMO einfacher, mit dem Fehler zu leben.
                                      Alternativ kannst du auch einfach nur neue Funktionen definieren, anstatt bestehendes zu erweitern. Das wird nämlich verstanden und nicht angemeckert.

                                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                      1 Antwort Letzte Antwort
                                      0
                                      • P Pittini

                                        @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                                        Z.B. was kommt beim ForceCreation-Fehler wenn du mit der Maus drüber gehst?

                                        2020-03-06 08_36_34-javascript - ioBroker.png

                                        AlCalzoneA Offline
                                        AlCalzoneA Offline
                                        AlCalzone
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #27

                                        @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                                        2020-03-06 08_36_34-javascript - ioBroker.png

                                        Ich muss hier nochmal drauf zurück kommen. Welche Version hast du denn? Mit der aktuellen bekomme ich es nicht reproduziert:
                                        61242702-a3ca-4239-86a6-132061f08486-grafik.png

                                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                        P 1 Antwort Letzte Antwort
                                        0
                                        • AlCalzoneA AlCalzone

                                          @Pittini sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                                          2020-03-06 08_36_34-javascript - ioBroker.png

                                          Ich muss hier nochmal drauf zurück kommen. Welche Version hast du denn? Mit der aktuellen bekomme ich es nicht reproduziert:
                                          61242702-a3ca-4239-86a6-132061f08486-grafik.png

                                          P Offline
                                          P Offline
                                          Pittini
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #28

                                          @AlCalzone sagte in [gelöst]Timingprobleme bei createState und setState im selben Skript:

                                          Welche Version hast du denn?

                                          ScriptEngine is 4.4.2. Und es ist bei mir reproduzierbar und in jedem Script wo ich das einsetze.

                                          Der Aufbau ist von Dir sogar, hier. Hier mal ein Testcode der hier den Fehler produziert:

                                          // Einmalig beim Programmstart alle States erzeugen, sofern nicht schon geschehen
                                          let states = [];
                                          states[0] = { id: "stateID1", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test0", type: "string", def: "Test0" } }
                                          states[1] = { id: "stateID2", initial: "Initialwert1", forceCreation: false, common: { read: true, write: true, name: "Test1", type: "string", def: "Test1" } }
                                          
                                          let numStates = states.length;
                                          states.forEach(function (state) {
                                              createState(state.id, state.initial, state.forceCreation, state.common, function () {
                                                  numStates--;
                                                  if (numStates === 0) {
                                                      // fertig!
                                                      main();
                                                  }
                                              });
                                          });
                                          
                                          function main() {
                                              // hier der eigentliche Programmablauf
                                          }
                                          
                                          

                                          ergibt sofort:
                                          2020-03-21 12_51_32-javascript - ioBroker.png

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          337

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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