我已經編程了幾年,但我是JavaScript新手。我試圖創建一個標準線程'通知'功能的hacky版本。我正在運行一系列ajax數據請求,每個請求需要大約200毫秒才能執行,並且我需要等到它們全部完成後再執行一個操作(繪製圖形)。javascript - 將對象參數傳遞給setInterval
我的解決方案是讓每個線程在完成時增加一個全局變量。然後,我使用setTimeout創建了一個計時器,每隔100毫秒檢查一次,看看是否所有線程都更新了變量,並且如果他們有,則執行該操作。
儘管有點哈克,這工作。
快進未來的幾個星期,我的程序不斷增加,現在我們需要的是 能夠在同一頁面上有多個圖表,每個圖表使用上述ajax請求獨立管理其數據,如以及使用圖形的幾個不同頁面。因此,我將圖形代碼提取到帶有require.js的模塊中,並定義一個執行圖形化的類來隔離每個圖形與其他圖形,但突然間setInterval不起作用。我做了一些谷歌搜索,找到下面的文章,我有點明白...
所以無論如何看來,當使用setInterval的「本」成爲一些奇怪的原因的窗口,因此,看不到我的方法。
無論如何,我試圖創造一個變種研究所遏制「這個」明確,這似乎幫助,但由於某些原因,它不喜歡過客「出師表」作爲遞歸調用的參數。從Firebug控制檯該錯誤消息是這樣的:
失蹤]後元素列表 [打破此錯誤]
}(9.9,[對象的對象))
下面是從一個樣品我的代碼:
var inst = this;
// some code... then in a function...
function(){
inst.waitUntil(10, inst);
}
inst.waitUntil = function(how_many_seconds, inst){
if (how_many_seconds < 0){
alert("Script timed out.");
return;
} else {
if (inst.allSchoolsLoaded()){
setTimeout("("+inst.draw+"("+inst.after+"))", 100);
} else {
var argString = "("+inst.waitUntil+"("+(how_many_seconds-0.1)+", "+inst+"))";
//alert(argString);
setTimeout(argString, 100);
}
}
}
你可以假設所有提到的變量都是在類的前面定義的。
我在束手無策我在這裏,任何幫助將非常感激。如果任何人都可以建議線程問題是可以避免的setInterval完全,這將是真棒更好的解決辦法,否則,如果你能提出一個辦法讓setInterval的工作或替代功能,這將是巨大的。
jQuery可用,我不介意安裝其他工具,如果他們會幫助。
提前許多感謝,
亞歷
那麼,什麼是錯'VAR completedCalls = 0;函數ajaxThreadResult(){... completedCalls ++; }'然後檢查'completedCalls == callsMade'? – 2012-02-24 01:24:04
看到這個問題,並在那裏回覆:http://stackoverflow.com/questions/2130241/pass-correct-this-context-to-settimeout-callback/9298306#9298306 – 2012-02-24 01:24:11
是的,這實際上是我在做什麼...函數allSchoolsLoaded()只是測試completedCalls == callsMade(顯然具有不同的變量名稱)。問題是如何每隔一段時間檢查一下這個狀態...... – Alex 2012-02-24 06:27:41