TimerManager со случайным recurTime - PullRequest
0 голосов
/ 07 мая 2011

Я хочу случайное время истечения на EACH итерации. Этот пример будет случайным образом определять время истечения от 5 до 15 секунд и использовать их вечно.

var timer = qx.util.TimerManager.getInstance();
timer.start(function(userData, timerId)
    {
        this.debug("timer tick");
    },
    (Math.floor(Math.random()*11)*1000) + 5000,
    this,
    null,
    0
);

Я также принимаю чистое решение JS, если оно есть.

http://demo.qooxdoo.org/current/apiviewer/#qx.util.TimerManager

1 Ответ

1 голос
/ 08 мая 2011

Проблема в том, что аргумент recurTime для TimerManager.start является нормальным аргументом для нормальной функции, поэтому он оценивается только один раз при вызове функции. Это не выражение, которое пересматривается снова и снова. Это означает, что вы получаете равноудаленные исполнения только с TimerManager.

Вы, вероятно, должны вручную написать то, что хотите, например, используя qx.event.Timer.once, заново вычисляя время ожидания при каждом вызове.

EDIT:

Вот фрагмент кода, который может пойти вам в правильном направлении (это будет работать в контексте класса qooxdoo):

var that = this;
function doStuff(timeout) {
  // do the things here you want to do in every timeout
  // this example just logs the new calculated time offset
  that.debug(timeout);
}

function callBack() {
  // this just calls doStuff and handles a new time offset
  var timeout = (Math.floor(Math.random()*11)*1000) + 5000;
  doStuff(timeout);
  qx.event.Timer.once(callBack, that, timeout);
}

// fire off the first execution
qx.event.Timer.once(callBack, that, 5000);
...