Function.createCallback não passa o contexto corretamente no FireFox
Eu descobri o que parece ser um bug na maneira como a biblioteca MS AJAX interage com o FireFox - mas talvez eu esteja fazendo errado. Eu tenho um script que se parece com isso:
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);
}
}
Em outras palavras, estou tentando fazer algo que provavelmente falhará periodicamente, então quero tentar, digamos, 10 vezes, com um segundo intervalo. A única maneira de descobrir como fazer isso é usar algo como o bit Function.createCallback da biblioteca MS Aja
E isso funciona corretamente, por exemplo, no IE 8 e no Chrome 2, ou seja, produz a seguinte saída:
currentRetry = 0; tentando novamente em 1 segundo.
currentRetry = 1; tentando novamente em 1 segundo.
currentRetry = 2; tentando novamente em 1 segundo.
currentRetry = 3; tentando novamente em 1 segundo.
currentRetry = 4; tentando novamente em 1 segundo.
currentRetry = 5; tentando novamente em 1 segundo.
currentRetry = 6; tentando novamente em 1 segundo.
currentRetry = 7; tentando novamente em 1 segundo.
currentRetry = 8; tentando novamente em 1 segundo.
currentRetry = 9; tentando novamente em 1 segundo.
entativas @Exceeded; currentRetry = 10
No entanto, no FireFox (versão 3.5, não o testou em outros sabores), a saída é assim:
currentRetry = 0; tentando novamente em 1 segundo. Tentativas excedidas; currentRetry = indefinido
Pensamentos sobre uma solução alternativa ou sobre o que estou fazendo de errad