Я обнаружил, что кажется ошибкой в том, как библиотека 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 = не определено
Есть какие-нибудь мысли или об обходном пути, или о том, что я делаю неправильно?