[Megoldva] Javascript objektum(?) tagjainak(?) elerese

Hi,

 

Volt ez a topic, de nem igazan porgott fel, gondolom tul specifikus - viszont ide jutottam vele:

client = cockpit.dbus("com.mycompany.Wisun.BorderRouter");
wisun = client.proxy();
console.log(wisun);

Ha megnezem a konzolt, ezt latom:

JS Console

Szeretnem elerni a Nodes, WisunNetworkName, WisunPanId, etc. property-ket(?) de nem tudom hogyan kell.

Ha azt mondom: console.log(wisun.WisunPanId); akkor azt mondja, undefined (es persze az osszes tobbire is). Probalkoztam azzal, hogy console.log(wisun.data.WisunPanId); - ugyanugy undefined.

Hogyan tudnam megszerezni ezeket az ertekeket?

 

Koszi,

Hozzászólások

Szerkesztve: 2022. 02. 28., h – 12:47

wisun.data.WisunPanId esetleg?

Szerkesztve: 2022. 02. 28., h – 13:05

Nem ismerem a cockpit-et, de az első tippem, hogy a proxy() hívás egy proxy objektumot hoz létre, ami aszinkron tölti be az adatokat. A wisun.WisunPanId, wisun.WisunNetworkName, stb. propertyk valószínűleg getterek, amik a data objektumból hívják elő az adatokat, viszont a data objektum a proxy létrehozásakor még üres. Amikor csak a wisun objektumot logolod, akkor a developer console dinamikusan jeleníti meg az objektumot, így ha az aszinkron hívás már befejeződött, látod az adatokat. Viszont amikor az adott propertyt logolod akkor a logolás pillanatbeli állapotot látod.

A megoldás az, hogy azután olvasod csak ki az adatokat, hogy az aszinkron hívás befejeződött. Gyanítom erre az addEventListener() használható.

Szerk: Vagy használd a proxy.wait() hívást, ami egy Promise-t ad vissza.

Koszi, ez jo iranynak tunik.

Szerk:

Na, ez volt a hianyzo tudomany.

 

Meg is lett az eredmeny:

  wisun = cockpit.dbus("com.mycompany.Wisun.BorderRouter");
  properties = wisun.proxy();
  properties.wait(function () {
    if(properties.valid) {
      console.log(properties.WisunSize);
    }
  });

 

Koszi megegyszer.

/sza2

Digital? Every idiot can count to one - Bob Widlar

Szerkesztve: 2022. 02. 28., h – 13:06

Az lehet például, hogy a client.proxy() nem objektumot, hanem egy stringet tér vissza. Ekkor

wisun = JSON.parse( client.proxy() )

csinál neked objektumot belőle.