我发现了 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 中可以正常工作,即它会产生以下输出:
当前重试 = 0; 1 秒后重试。
当前重试 = 1; 1 秒后重试。
当前重试 = 2; 1 秒后重试。
当前重试 = 3; 1 秒后重试。
当前重试= 4; 1 秒后重试。
当前重试= 5; 1 秒后重试。
当前重试 = 6; 1 秒后重试。
当前重试 = 7; 1 秒后重试。
当前重试= 8; 1 秒后重试。
当前重试 = 9; 1 秒后重试。
超过重试次数;当前重试 = 10
但是,在 FireFox(3.5 预览版,尚未在其他版本中测试过)中,输出如下所示:
当前重试 = 0; 1 秒后重试。
超过重试次数;当前重试=未定义
对解决方法或我做错了什么有什么想法吗?
好吧,我不知道 Function.createCallback 有什么问题,但我可以通过使用匿名方法来修复它:
var callback = function () { dowork(request) };
setTimeout(callback, 1000);
距离政府工作足够近。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)