Function.createCallback неправильно передает контекст в FireFox

Я обнаружил, что, похоже, ошибка в том, как библиотека MS AJAX взаимодействует с FireFox - но, возможно, я просто делаю это неправильно. У меня есть скрипт, который выглядит примерно так:

    dowork({ value: "some value", currentRetry: 0 });

    // Try to connect at least 10 times, with a second in-between retries..
    function dowork(request) {
        if (request.currentRetry < 10) {
            logMessage('currentRetry = ' + request.currentRetry + '; trying again in 1 second.');
            request.currentRetry++;
            var callback = Function.createCallback(dowork, { value: request.context, currentRetry: request.currentRetry });
            setTimeout(callback, 1000);
        }
        else {
            logMessage('Exceeded retries; currentRetry = ' + request.currentRetry);
        }
    }

Другими словами, я пытаюсь сделать что-то, что может периодически терпеть неудачу, поэтому я хочу повторить попытку, скажем, 10 раз, со вторым промежуточным интервалом. Единственный способ выяснить, как это сделать, это использовать что-то вроде бита Function.createCallback из библиотеки MS Ajax.

И это работает правильно, скажем, в IE 8 и Chrome 2, то есть он производит следующий вывод:

currentRetry = 0; повторить попытку через 1 секунду.
currentRetry = 1; повторить попытку через 1 секунду.
currentRetry = 2; повторить попытку через 1 секунду.
currentRetry = 3; повторить попытку через 1 секунду.
currentRetry = 4; повторить попытку через 1 секунду.
currentRetry = 5; повторить попытку через 1 секунду.
currentRetry = 6; повторить попытку через 1 секунду.
currentRetry = 7; повторить попытку через 1 секунду.
currentRetry = 8; повторить попытку через 1 секунду.
currentRetry = 9; повторить попытку через 1 секунду.
Превышены повторные попытки; currentRetry = 10

Тем не менее, в FireFox (3.5 Preview, не тестировал его в других вариантах), результат выглядит следующим образом:

currentRetry = 0; повторить попытку через 1 секунду. Превышены повторные попытки; currentRetry = не определено

Есть мысли или об обходном пути, или о том, что я делаю не так?

Ответы на вопрос(1)

Ваш ответ на вопрос