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:
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,
- 94 megtekintés
Hozzászólások
wisun.data.WisunPanId esetleg?
- A hozzászóláshoz be kell jelentkezni
Mint irtam, azt probaltam, ugyanaz, undefined.
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
a wisun.data sincs meg? ki tudnád tenni a nyers js tömböt vhova?
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Nincs mit. Ha tudsz await-et használni akkor egész kulturált:
wisun = cockpit.dbus("com.mycompany.Wisun.BorderRouter");
properties = await wisun.proxy().wait();
if(properties.valid) {
console.log(properties.WisunSize);
}
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni