NEWS
Javascript http request mit delay
-
Hallo zusammen,
ich stehe gerade etwas auf dem Schlauch. Existiert bei Javascript keine einfache delay Funktion wie z.B. "sleep: 10"?Ich möchte mehrere URLs mit einer Verzögerung aufrufen und bekomme es nicht gebacken. Hier sollte zwischen den requests ein delay rein.
Danke für eure Hilfe
on({id:"javascript.0.States.DoorPi"/*States.DoorPi*/,val: true}, function (obj) { if (obj.newState.val === true) { setState("sayit.1.tts.text", "de;100;" + 'http://192.168.179.60:8082/state/sayit.1.tts.mp3'); request("http://192.168.179.54:9000/anyurl?p0=mixer&p1=volume&p2=20").on('error', function (e) { log(e, 'error');}); request("http://192.168.179.54:9000/anyurl?p0=mixer&p1=volume&p2=100").on('error', function (e) { log(e, 'error');}); } });
-
Nein, ein delay oder sleep gibt es nicht (glaub ich zumindest).
Musst mit timeout arbeiten.
on({id:"javascript.0.States.DoorPi"/*States.DoorPi*/,val: true}, function (obj) { if (obj.newState.val === true) { setTimeout(function() { tue etwas nach 2 Sek. }, 2000); setTimeout(function() { tue etwas nach 4 Sek. }, 4000); setTimeout(function() { tue etwas nach 6 Sek. }, 6000); } });
-
Das entspricht zwar nicht dem Geist des Erfinders oder Philosophie, jedoch kann man ein sleep() so lösen:
// Codeausschnitte const getDetailsOfLight = async function (id, setId=null, value=0) { const prefix = '1-##**25'; if (setId) { setState(setId, getState(setId).val + value) await sleep(20); // warte auf das Schreiben des Datenpunkts } ... } async function sleep (ms) { return new Promise( resolve => {setTimeout(()=>{ resolve();},ms);}); }
Alle Funktion bis zum sleep müssen mit async definiert und mit await aufgerufen werden, wenn du kein asynchrones Verhalten wünschst.
-
@bahnuhr
Vielen Dank, klappt soweit -
@ticaki sagte in Javascript http request mit delay:
async
Ja, damit hab ich mich auch schon mal abgekämpft.
War mir aber irgendwie zu kompliziert.
So richtig verstanden hab ich dieses async und promise (noch) nicht.mfg