NEWS

Javascript http request mit delay


  • Starter

    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');});
    }
    });

  • Forum Testing Most Active

    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.


  • Starter

    @bahnuhr
    Vielen Dank, klappt soweit 🙂


  • Forum Testing Most Active

    @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


Log in to reply
 

Suggested Topics

  • 2
  • 14
  • 19
  • 1
  • 4
  • 3
  • 1
  • 14

1.0k
Online

32.1k
Users

38.8k
Topics

525.6k
Posts