NEWS
Hilfestellung Rückgabewert einer Funktion
-
Hallo,
aktuell wird ein von der IP-Kamera ein Bild abgerufen, danach der benötigte Ausschnitt herausgeschnitten und über Pushover verschickt.
Zur Vorbeugung von Zeitkonflikten sind zwischen den Schritten 2 bzw. 4 Sekunden Wartezeit eingebaut. Funktioniert so mit einem kleinen Blocky.Das ganze wollte ich nun eleganter lösen, scheitere aber an meiner zu geringen Spript-Kenntnis.
- Bild abrufen –> 2. periodisch prüfen ob Bild vorliegt -> 3. danach Ausschnitt erzeugen –> 4. periodisch prüfen ob Ausschnitt fertig –> zum Schluss Bild versenden,
Wurde kein Bild erzeugt dann nur Textnachricht ohne Bild pushen.
Nun habe ich diese Funktion soweit zusammen gelesen bzw. mittels per trial and error erzeugt.
Leider bin ich zu blöd der Funktion beizubringen, einen Rückgabewert, in dem Fall true oder falsch zu liefern und benötige hierbei Hilfe !image = '/opt/iobroker/tmp/cam/klingelalarm.jpg';
Ein log(ImageExist (image,500,10)); erzeugt undefined.
/** * prüft "tries" mal in "t_interval" Zeitabständen auf vorhandensein der Datei "path" */ function ImageExist(path,t_interval,tries){ var fs = require('fs'); var counter = 0; var exist; const o_interval = setInterval(function () { if (fs.existsSync(path)) { exist = true; // nur zum Test clearInterval(o_interval); } else { counter = counter + 1; if (counter > tries-1) { exist = false; // nur zum Test clearInterval(o_interval); } } }, t_interval); // setInterval // return o_interval.vorhanden; // nur zum Test return exist; // geht nicht ich gebe auf ;-( } //ImageExist
Gruß Klaus
- Bild abrufen –> 2. periodisch prüfen ob Bild vorliegt -> 3. danach Ausschnitt erzeugen –> 4. periodisch prüfen ob Ausschnitt fertig –> zum Schluss Bild versenden,
-
@klausM
fs.existsSync() ist asynchron, d.h. dein "return exist" wird normalerweise vorher schon zurückgegeben, bevor überhaupt die Variable exist gefüllt ist. Daher das "undefined".
D.h. während fs.existsSync() immer noch im Filesystem prüft, ob das File existiert, ist längst das Script durchlaufen.
Ich bin wahrlich kein async/await-Experte, aber mittels async/await kannst du das sicherlich lösen. Die Experten diesbezüglich hier im Forum können sicherlich besser helfen. -