Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Mehrere Abfragen auf einmal abfragen

    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

    Mehrere Abfragen auf einmal abfragen

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

      Hallo, ich habe folgende Abfrage, die auch einwandfrei funktioniert.

      for(const device in this.devices){
      	if(this.devices[device].historicValues){
      		for(const value in this.devices[device].historicValues){
      			for(const type in this.devices[device].historicValues[value].type){
      				for(const timeBase of Object.values(this.timeBases)){
      					myUrl = `http://${this.config.address}:${this.config.port}/rest/1/projects/${this.config.projectname}/devices/${device}/hist/energy/`;
      					myUrl += `${value}/`;
      					myUrl += `${type}/.json?start=${timeBase.startstring}&end=${timeBase.endstring}`;
      					this.log.silly(`${myUrl} was send to gridVis`);
      					
      					const result = await axios.get(myUrl,{timeout: this.config.timeout});
      					this.log.silly(`result.data: ${JSON.stringify(result.data)}`);
      					if(result.status === 200){		// OK => write data into internal state
      						if((result.data.energy || result.data.energy === 0)){ // check present or equal 0 (a value must be present => also value == 0)
      							if(!isNaN(result.data.energy)){ // check not equal to NaN
      								this.setStateAsync(`${this.internalIds.devices}.${device}.${this.internalIds.historicValues}.${value}.${type}_${timeBase.namestring}`,result.data.energy,true);
      							}
      							else{
      								this.setStateAsync(`${this.internalIds.devices}.${device}.${this.internalIds.historicValues}.${value}.${type}_${timeBase.namestring}`,{q:1, c:"GridVis sends value NaN"},true);
      								this.log.info(`${device}.${value}.${type} is NaN  --  (${this.devices[device].deviceName})`);
      							}
      						}
      					}
      				}
      			}
      		}
      	}
      }
      

      Ichdurchlaufe also die Elemente und rufe immer einen Wert bei einem API ab, warte auf das Ergebnis und dann kommt der nächste Wert dran.

      Könnte ich das auch mit

      await Promise.all
      

      irgendwie so hin bekommen, dass ich alle Anfragen starten kann und dann, wenn alle fertig sind darauf reagieren kann?
      Dann könnte ich aber nicht nur1 result anlegen, sondern müsste mehrere anlegen, oder?
      Es müssten auch die einzelnen werte der Schleifen gespeichert werden, oder?

      Wäre es mit einem

      .then()
      

      einfacher zu realisieren und wären dann nicht auch im .then() teil die Variablen der in der Schleifen enthaltenen Variablen noch da?

      ich glaube mit

      .then
      

      sollte es gehen, wenn nötig. oder?

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

      Support us

      ioBroker
      Community Adapters
      Donate

      838
      Online

      31.9k
      Users

      80.1k
      Topics

      1.3m
      Posts

      1
      1
      73
      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