我发现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次,其次是中间的第二次。我可以弄清楚如何执行此操作的唯一方法是使用类似MS Ajax库中的Function.createCallback位。
这在IE 8和Chrome 2中正常工作,即产生以下输出:
currentRetry = 0;再试一次。
currentRetry = 1;再试一次。
currentRetry = 2;再试一次。
currentRetry = 3;再试一次。
currentRetry = 4;再试一次。
currentRetry = 5;再试一次。
currentRetry = 6;再试一次。
currentRetry = 7;再试一次。
currentRetry = 8;再试一次。
currentRetry = 9;再试一次。
超过重试次数; currentRetry = 10
然而,在FireFox(3.5预览版中,尚未对其他版本进行测试)中,输出如下所示:
currentRetry = 0;再试一次。 超过重试次数; currentRetry = undefined
关于变通方法或我做错了什么的想法?
答案 0 :(得分:1)
好吧,我不知道Function.createCallback的问题是什么,但我能够通过使用匿名方法修复它:
var callback = function () { dowork(request) };
setTimeout(callback, 1000);
足够接近政府工作。