Function.createCallback不能在FireFox中正确传递上下文

时间:2009-06-09 10:46:37

标签: firefox asp.net-ajax callback

我发现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

关于变通方法或我做错了什么的想法?

1 个答案:

答案 0 :(得分:1)

好吧,我不知道Function.createCallback的问题是什么,但我能够通过使用匿名方法修复它:

var callback = function () { dowork(request) }; 
setTimeout(callback, 1000);

足够接近政府工作。