Siri: Buffering von Events

Hallo,

mein JS sieht vereinfacht wie folgt aus (das original ist etwas komplexer und in einem Closure (kann man das so sagen?)):

isRunning = false;
counter = 0;

function timeoutFunction() {  
  
  counter++;  
  if (counter < 3) {  
   isRunning = true;  
   window.setTimeout(timeoutFunction, 500);  
  } else {  
   window.clearTimeout(timeoutFunction);  
   isRunning = false;  
  }  
}  
  
function reset() {  
  counter = 0;  
  isRunning = false;  
}  
  
function start() {  
  reset();  
  timeoutFunction();  
}

Die Funktion start() wir über addEventListener an einem Element registriert. Jetzt wäre es notwendig die Events zu puffern. Mein Versuch:

function start() {  
  while (isRunning == true) {  
  }  
  reset();  
  timeoutFunction();  
}

ist kläglich gescheitert! Geht auch in die falsche Richtung. Ich möchte z.B. zwei Klicks puffern und dann timeoutFunction auch zweimal ausführen. Sie soll aber jeweils bis zum Ende (counter == 2) ausgeführt werden. Ein Ansatz würde mir schon weiterhelfen.

Grüße
Siri

  1. window.setTimeout(timeoutFunction, 500);
      } else {
       window.clearTimeout(timeoutFunction);

    Das wird schon einmal nicht gehen. setTimeout gibt dir ein Handle zurück, das ist ein Number-Wert. Den musst du clearTimeout übergeben, um die verzögerte Ausführung abzubrechen.

    http://de.selfhtml.org/javascript/objekte/window.htm#clear_timeout
    https://developer.mozilla.org/en/DOM/window.clearTimeout

    Ich möchte z.B. zwei Klicks puffern und dann timeoutFunction auch zweimal ausführen.

    Dann erhöhe einen weiteren Counter, mit dem du die ausstehenden Durchläufe zählst. Nach einem Durchlauf verringerst du ihn um 1. Wenn er immer noch größer als 0 ist, dann startest du den Durchlauf erneut.

    Mathias

    1. Hallo,

      vielleicht habe ich mich falsch ausgedrückt. Ich möchte so was ähnliches machen, wie es Felix Riesterer hier beschrieben hat. Nur möchte ich eben die Klicks buffern und jede angestoßene timeoutFunction()zuerst zu Ende ausgeführt wird.

      Aber zumindest denke ich, dass ich das clearTimeout nicht möchte bzw. das es gegen das arbeitet, was ich vorhabe.

      Grüße
      Siri

      1. Hallo,

        vielleicht habe ich mich falsch ausgedrückt. Ich möchte so was ähnliches machen, wie es Felix Riesterer hier beschrieben hat.

        Dort werden verschiedene Aufrufe bis zum onload verzögert, dann nach der Reihe ausgeführt. Genauer gesagt werden die Parameter in einem Array gespeichert und später ausgelesen.

        So etwas kannst du natürlich auch machen, sofern du Parameter hast. Da ich keine sah, habe ich zu einem einfachen Counter geraten.

        Nur möchte ich eben die Klicks buffern und jede angestoßene timeoutFunction()zuerst zu Ende ausgeführt wird.

        Das habe ich auch so verstanden und dafür einen Lösungsweg beschrieben.

        Aber zumindest denke ich, dass ich das clearTimeout nicht möchte bzw. das es gegen das arbeitet, was ich vorhabe.

        Okay, dann kannst du es ja löschen.

        Mathias

        1. Hallo,

          hast mich auf jeden Fall auf die richtige Spur gebracht! Wenn ich's richtig verstanden hab, dann kan man das mit einer Callbackfunktion lösen.

          Grüße
          Siri