NEWS
Objektinstanz behalten / Singleton
-
Hallo zusammen,
ich würde gerne eine in einem Skript erstellte Objektinstanz (eine Queue) über Skriptausführungen hinweg behalten/weiterverwenden.
Ist dies möglich? Wenn ja, wie - wo kann ich die Objektinstanz "ablegen"?
Vielen Dank und viele Grüße
synthe -
@synthe Was verstehst Du unter Objektinstanz ? Man kann Objekte in Datenpunkte speichern (seit JS Version 4.x) , um sie weiter zu verwenden.
-
Hallo @paul53 ich möchte eine nicht serialiserbare Objektinstanz irgendwo außerhalb des Skriptes (in einer globalen Variable, oder ähnlich) ablegen, um sie später - im gleichen, oder einen anderen Skript - wiederverwenden zu können.
Vereinfacht und beispielhaft möchte ich folgendes machen:
let myQueue; if(!(myQueue = globalObjects.get(‘meineInstanz’))) { myQueue = new Queue(); globalObjects.put(‘meineInstanz’, myQueue); } myQueue.push(someAction);
Vielen Dank und viele Grüße
-
@synthe
Eine Queue kann man in Javascript als Array abbilden.@synthe sagte in Objektinstanz behalten / Singleton:
außerhalb des Skriptes (in einer globalen Variable, oder ähnlich) ablegen, um sie später - im gleichen, oder einen anderen Skript - wiederverwenden zu können.
Dafür dienen in ioBroker Datenpunkte, die mit setState(id, val, true) geschrieben und mit getState(id).val eingelesen werden können.
-
@paul53 Vielen Dank - ich werde das heute Abend mal versuchen!
Zum Thema Queue: Ja, prinzipiell ist es ein Array, nur dass beim hinzufügen dinge in der richtigen Reihenfolge und synchron (das wird sicher problematisch) ausgeführt werden sollen...
Mittlerweile bin ich doch am zweifeln, ob das in JS generell machbar ist, oder ob ich nicht über eine Lock-Datei - die periodisch abgefragt wird (oder ähnlich) - arbeiten muss. Noch habe ich Schwierigkeiten mich in die Grundprinzipien von JS hineinzudenken, was zugegebenermaßen gar nicht so viel mit Iobroker zu tun hat - wie mir langsam klar wird -
@synthe
Hier muss ich Dir zustimmen. Alleine das Ablegen der Queue selber sorgt nicht für eine Synchrone Abarbeitung - dazu müsste sichergestellt sein das genau eine Instanz die Abarbeitung übernimmt, und andere Instanzen nur etwas hinzufügen können.Auch ist durch das Objekt-Modell vom IoBroker ein Hinzufügen von Queue Objekten kritisch - soweit ich das verstanden habe gibt es keine Funktionalität, die es erlaubt Schreibzugriffe auf einen Datenpunkt von anderen Stellen aus zu blockieren (zeitlich begrenzt, als "Resource Lock").
Da wirst Du dir etwas anderes einfallen lassen müssen.