NEWS
[gelöst] Listener/Events/ext. Subscriptions stoppen, wie?
-
Klingt logisch.
Hab es einfach mal schnell probiert… das Ergebnis ist trotz Logik gleich.
host.nuc-g7-i7 2017-05-17 07:03:20.211 info Restart adapter system.adapter.javascript.1 because enabled host.nuc-g7-i7 2017-05-17 07:03:20.209 error instance system.adapter.javascript.1 terminated with code 0 (OK) javascript.1 2017-05-17 07:03:20.190 error javascript.1 2017-05-17 07:03:20.190 error at Device. (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\node_modules\usb\usb.js:200:7) javascript.1 2017-05-17 07:03:20.190 error at Interface.co2Interface.release (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\co2-monitor.js:101:21) javascript.1 2017-05-17 07:03:20.190 error at Device.usb.Device.close (C:\ioBroker\node_modules\iobroker.javascript\node_modules\co2-monitor\node_modules\usb\usb.js:43:7) javascript.1 2017-05-17 07:03:20.190 error at Error (native) javascript.1 2017-05-17 07:03:20.190 error Error: Can't close device with a pending request javascript.1 2017-05-17 07:03:20.190 error uncaught exception: Can't close device with a pending request javascript.1 2017-05-17 07:03:20.185 info script.js.Entwicklung.co2-monitor: ---------------------- **** Skript wurde gestoppt **** ---------------------- javascript.1 2017-05-17 07:03:20.185 info Stop script script.js.Entwicklung.co2-monitor javascript.1 2017-05-17 07:03:19.137 info script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.663"} javascript.1 2017-05-17 07:03:19.137 info script.js.Entwicklung.co2-monitor: temp: 25.663 javascript.1 2017-05-17 07:03:16.491 info script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.600"} javascript.1 2017-05-17 07:03:16.491 info script.js.Entwicklung.co2-monitor: co2: 604 javascript.1 2017-05-17 07:03:14.124 info script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.600"} javascript.1 2017-05-17 07:03:14.124 info script.js.Entwicklung.co2-monitor: temp: 25.600 javascript.1 2017-05-17 07:03:11.473 info script.js.Entwicklung.co2-monitor: data: {"co2":604,"temperature":"25.600"} javascript.1 2017-05-17 07:03:11.473 info script.js.Entwicklung.co2-monitor: co2: 604 javascript.1 2017-05-17 07:03:09.105 info script.js.Entwicklung.co2-monitor: data: {"co2":603,"temperature":"25.600"} javascript.1 2017-05-17 07:03:09.105 info script.js.Entwicklung.co2-monitor: temp: 25.600 javascript.1 2017-05-17 07:03:06.458 info script.js.Entwicklung.co2-monitor: co2: 603 javascript.1 2017-05-17 07:03:03.616 info script.js.Entwicklung.co2-monitor: -------- -------- -------- CO2-Monitor connect erfolgreich gestartet -------- -------- -------- javascript.1 2017-05-17 07:03:01.548 info script.js.Entwicklung.co2-monitor: registered 0 subscriptions and 0 schedules javascript.1 2017-05-17 07:03:00.547 info script.js.Entwicklung.co2-monitor: -------- -------- -------- CO2-Monitor Skript gestartet -------- -------- -------- javascript.1 2017-05-17 07:03:00.540 info Start javascript script.js.Entwicklung.co2-monitor
-
Asynchrone Funktionen können meines Kenntnisstandes nicht in try/catch abgearbeitet werden. Try catch ist beim Aufruf des Callbacks schon längst abgearbeitet. `
Jein. Wenn der Fehler in der Asynchronen Funktion auftritt, bevor sie die Kontrolle an den Aufrufer zurückgibt, sollte es per try-catch abfangbar sein. try-catch im Callback fängt nur Fehler in der eigenen Callback-Funktion ab.In diesem Fall scheint der Fehler zwischendrin aufzutreten:
ruhr's code -> * disconnect -> | ruhr's code (nach Aufruf von disconnect) | |__ disconnect arbeitet noch, bzw hat selbst asynchron was aufgerufen | | -> fehler | ** |__ hier käme der Callback
Fehler in * und ** lassen sich mit try-catch um disconnect (*) bzw. im callback (**) abfangen.
Fehler in internen asynchronen Aktionen der disconnect-Methode nicht.
-
Was passiert wenn man sowas schreibt…..?
co2Monitor.disconnect(function() { // weitere Aktionen, die nach dem Disconnect ausgeführt werden sollen. // wenn keine, dann leer lassen. }).on ('error', function (e) { console.error (e);});
-
interessante Erklärungen!
ich probiere den Vorschlag nachher aus
Gesendet von iPhone mit Tapatalk
-
host.nuc-g7-i7 2017-05-17 16:49:29.792 error instance system.adapter.javascript.1 terminated with code 0 (OK) javascript.1 2017-05-17 16:49:29.770 error error in onStop callback: TypeError: Cannot read property 'on' of undefined javascript.1 2017-05-17 16:49:29.770 info script.js.Entwicklung.co2-monitor: ---------------------- **** Skript wurde gestoppt **** ----------------------
-
Eine möglichkeit wäre noch (z.b. am Ende des Skripts):
process.on('uncaughtException', function (err) { // sicherstellen, dass es wirklich der Fehler aus co2Monitor ist, den wir abfangen wollen. Diesen dann ignorieren oder darauf irgendwie reagieren // Ansonsten Fehler weitergeben per throw err });
-
javascript.1 2017-05-18 20:40:16.857 error script.js.Entwicklung.co2-monitor: ReferenceError: process is not defined
-
Oh… dann funktioniert das nur in Adaptern. Fürchte, es muss in dem Modul nachgebessert werden.
-
Der stopPoll Aufruf bekommt eigentlich ein callback, was im original code allerdings nicht genutzt wird.
Ändere deinen Code auf folgendes:
onStop(function skriptStop () { try{ co2Monitor.co2Endpoint.stopPoll(function(){ log("Polling gestoppt"); co2Monitor.co2Interface.release(true, (error) => { if(error) { co2Monitor.emit('error', error); } else { log("Interface released"); co2Monitor.co2Device.close(); log("Device geschlossen"); cb(true); } }); }); } catch (e) { log(e); // hat nicht geklappt } log("---------------------- **** Skript wurde gestoppt **** ----------------------"); }, 100 /*ms*/);
-
Der stopPoll Aufruf bekommt eigentlich ein callback, was im original code allerdings nicht genutzt wird.
Ändere deinen Code auf folgendes: `
Danke!!!
Das hat funktioniert :!: . Dein Post hatte ich nicht gesehen. Und als ich nun das Thema noch einmal angehen wollte habe ich ihn zum Glück gefunden.
Hat auf Anhieb geklappt, auch wenn ich keine Ahnung habe, was da abläuft :?