2009-06-09 77 views
1

我發現似乎是MS AJAX庫與FireFox交互的一個錯誤 - 但也許我只是做錯了。我有一個腳本,看起來像這樣:Function.createCallback在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和鉻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預覽,在其它風味沒有測試它),則輸出是這樣的:

currentRetry = 0;在1秒內再次嘗試。 超過了重試次數; currentRetry = undefined

任何想法或者在解決方法或我做錯了什麼?

回答

1

好了,我不知道這個問題是Function.createCallback什麼,但我可以通過使用匿名方法,而不是修復它:

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

政府工作不夠關閉。

+0

這是否修復了ASP.NET的更高版本?我[有一個問題](http://stackoverflow.com/questions/6768673/javascript-function-createcallback-called-50-times-when-i-use-addclass-removec)具有相同的功能,但我沒有明確地稱呼它。 – 2011-07-21 17:58:25

相關問題