NEWS
JS: Wie auf socket-Ergebnis warten?
-
Hallo!
Ich weiß, es ist eine schlechte Praxis, blockierende I/O-Operationen zu verwenden, aber ich möchte gerne eine bestimmte Ablaufsteuerung in einem Skript programmieren.
Hierzu habe ich ein Blockly gebaut, welches in mehreren Schritten Wasser in der Heizung auffüllt:Prüfe Heizungsdruck
Wenn zu niedrig -> Starte Logik:
Schalte Pumpe aus
Öffne Wasserventil bis Druck ok
Schließe Ventil
Schalte Pumpe einDas lässt sich auch prima lösen, jedoch muss ich für die Pumpensteuerung einen Befehl per TCP-Socket an meine ebusd-Installation senden und auf das Ergebnis (ob es geklappt hat) reagieren.
Hierzu nutze ich folgendes JavaScript:
var net = require('net'); function sendMessage(host, port, message) { var retry = 0; var finished = false; var client = net.connect({host:host, port: port}, function () { console.log('connected to server!'); client.write(message); }); client.on('data', function (data) { // OK: "done..." // Nicht OK: "ERR..." // Rückgabe nach "quit": "connection closed" if(data.toString().indexOf('connection closed')<0) { if(data.toString().indexOf('done')>=0) { log("eBus ok!", 'warn'); client.write('quit\r\n'); finished = true; } else { log("eBus: " + data.toString() + " versuche erneut", 'warn'); retry++; if(retry<5) { sleep(2000); client.write(message); } else { log("eBus FEHLER!", 'warn'); client.write('quit\r\n'); finished = true; } } } }); client.on('end', function () { console.log('disconnected from server'); finished = true; }); client.on('error', function (error) { console.error('error: ' + error); client.end(); finished = true; }); } sendMessage('IP-Adresse', 8888, 'write -c MM1 MKModus Stand-By\r\n');
Gerne würde ich das als JS-Funktion in Blockly nutzen, jedoch muss mir der Code dafür unbedingt das Ergebnis der ganzen Aktion zurückgeben. Im jetzigen Zustand erfolgt die Rückkehr nach SendMessage ja umgehend und ich weiß nicht, ob der Vorgang erfolgreich war.
Habt ihr irgendeine Idee, wie man das lösen könnte?
-
@oxident setzt dich mal mit await und async auseinander
-
@arteck Hatte gehofft, da drumherum zu kommen. Jetzt habe ich wohl keine Ausrede mehr