NEWS
Wiedermal das leidige Thema mit Async
-
@Peoples Ich sehe gerade auch nicht, was hier schief gehen könnte. Wie verhält es sich denn, wenn's nicht geht?
-
@UncleSam
Das erstellte Dropdown ist ohne Inhalt. Verlasse ich die Admin Oberfläche und öffne Sie wieder ist der Inhalt da.Ich habe auch schon mal ein "PopUp" das bestätigt werden muss eingebaut dann geht es auch.
-
@Peoples
Ich hatte in dem Adapter schoolfree das gleich Problem und habe es aus diesem Grund mit fetch in der index gelöst.sendTo ist beim ersten Adapterstart halt nicht so gut. Oder du baust in der index ein timeout ein, falls die Daten noch nicht vorhanden sind.
Falls die Daten bereits vorhanden sind, kannst du ja den timeout umgehen.
Als Wartezeit bei dem Timeout kannst du ja ein Info Popup einblenden
-
@simatec
Aber wie mache ich das mit dem fetch wenn ich eigentlich keine URL habe da ich ja die Daten aus der main.js - Funktion abgreifen will -
@Peoples
Ich löse das alles in der index.
Aus der main hole ich nix ab.Meine Daten stehen alle in einer json, die ich mir mit fetch auslese.
Ich konnte leider auch keine bessere Lösung finden, aber so funktioniert das einlesen beim schoolfree Adapter recht ordentlich
-
@Peoples
https://github.com/oweitman/ioBroker.mytime/blob/080b20cc33e1a21eb726b199cf3f07feff75590a/admin/index_m.html#L206Hier kannst du schauen wie das Zusammenspiel zwischen Admin Oberfläche und Adapter mittels sendto funktioniert.
Allerdings verwende ich kein promise sondern einen stinknormalen callback.Beim link musst du ein wenig aufpassen, da dieser auf eine ältere Version des repos verweist. Mittlerweile habe ich den Adapter auf react überarbeitet und es etwas anders gelöst.
Da du keinen Einfluss auf die Zeit zur Rückmeldung der Daten hast, wirst du im html dein Dropdown erst einmal leer definieren und dann wenn die Daten ankommen dieses html Element dynamisch befüllen. Dabei hilft die jquery, welches von Iobroker automatisch schon geladen wird.
https://stackoverflow.com/questions/815103/jquery-best-practice-to-populate-drop-down -
@Peoples sagte in Wiedermal das leidige Thema mit Async:
erstmaligen Adapterstart nach der Installation das Ergebnis zu spät zurückgemeldet und das Dropdown-Feld im Admin ist schon erstellt
In Zwave2 mache ich das so, dass ich den State
system.adapter.zwave2.0.alive
abfrage und subscribe und erst wenn diesertrue
ist, die Abfragen mache, die von der Instanz beantwortet werden müssen. -
@OliverIO
Bei dir klingt das immer so einfach aber aus meiner Sicht ist es, als würde ein Professor mit einem Grundschüler reden -
Oh, ich hab auch viel rumprobiert
Schau dir die codestellen an und wenn du fragen hast frag.
Manchmal muss man sich durch beißen.
Auch hilft es, in anderen Adaptern mal zu schauen wie da bereits etwas gelöst wurde -
so ich hab mir deinen code nochmal angeschaut und folgendes gefunden:
admin/client:
1)async function getVisContent() {
das async kann da weg, gemäß mdn dokumentation ist async nur in einer funktion notwendig, in der mit await aufgerufen wird.
2)sendTo('viewswitch.0', 'send', mObj, (visData) => {
scheint korrekt zu sein.
wenn du hier im Forum fragen stellst, sind diese Fehlermeldungen wichtig. bitte nicht einfach schreiben "irgendwo im Syntax einen Fehler".
Bitte konkret benennen mit Zeile und exakte Fehlermeldung, wie sie in der debugger console ausgegeben wird.
Der sendTo-Aufruf im client sieht bei mir wie folgt aus. Ich verwende hierden socketefehldirekt.:function getCountdownInfo(callback) { this.socket.emit('sendTo', [adapter,instance].join('.'), 'getCountdownInfo', {},function (data) { callback(data); }); }
Server
hier sieht es für mich erst einmal ok aus.