2010-11-16 74 views
5

我需要讓一段代碼總是獨立於其他代碼運行。有沒有在JavaScript中創建線程來運行此功能的方法?在javascript中的線程(或類似的東西)

- 爲什麼的setTimeout不工作對我來說

我試過,但它運行只是一個單一的時間。如果我遞歸地調用函數,它會在一段時間後拋出錯誤「太多的遞歸」。我需要每運行100個milis(這是一個與嵌入式系統的通信)。

--as你問,這裏去一些代碼

function update(v2) { 
    // I removed the use of v2 here for simplicity 
    dump("update\n"); // this will just print the string 
    setTimeout(new function() { update(v2); }, 100); // this try doesn't work 
} 
update(this.v); 

它拋出 「太多遞歸」。

+0

我想看看一些代碼:)也許有些東西可以改進... – 2010-11-16 13:46:38

+0

@fcalderan那裏是 – 2010-11-16 13:56:42

+0

好的,1)dump()是做什麼的? 2)如果你不使用,你爲什麼通過一個論點? 3)try/catch試圖抓住什麼? =)4)爲什麼你創建一個函數的實例?如果你刪除'新'的構造函數?這個代碼的目的是什麼? – 2010-11-16 14:02:50

回答

2

獲得了你的功能去掉new關鍵字的環傳遞到setTimeout(),它應該工作。

function update(v2) { 
try { 
    dump("update\n"); 
} catch(err) { 
    dump("Fail to update " + err + "\n"); 
} 
setTimeout(function() { update(v2); }, 100); 
} 
update(this.v); 

或者只是使用setInterval()

function update(v2) { 
try { 
    dump("update\n"); 
} catch(err) { 
    dump("Fail to update " + err + "\n"); 
} 
} 
var this_v = this.v; 
setInterval(function() {update(this_v);}, 100); 

編輯:在一個變量引用this.v,因爲我不知道是什麼的this的價值是在應用程序中。

2

window.setTimeout()是你需要的。

+0

setInterval怎麼樣? – Stephen 2010-11-16 13:30:30

+0

是的,setInterval()將是你所需要的。 – 2010-11-16 13:37:29

+0

我試了一下,它只用了一次。如果我遞歸地調用函數,它會在一段時間後拋出錯誤「太多的遞歸」。 – 2010-11-16 13:38:09

4

我假設你問的是在另一個線程上執行一個函數。但是,Javascript不支持多線程。

參見:Why doesn't JavaScript support multithreading?

在所有的主流瀏覽器的Javascript引擎運行在單個線程。如上文所述,在不同線程上運行函數會導致併發問題。例如,兩個函數同時修改一個HTML元素。

3

正如其他人在這裏指出的,也許多線程並不是你實際需要的情況。 setInterval可能就足夠了。然而,如果你真的需要多線程,JavaScript通過web工作者功能支持它。基本上,主JavaScript線程只能通過事件和消息傳遞(本質上是字符串)與其他線程(工作者)交互。工作人員無法訪問DOM。這避免了任何併發問題。

這裏是網絡工作者規格:http://www.whatwg.org/specs/web-workers/current-work/

更教程處理:http://ejohn.org/blog/web-workers/

+0

請注意,Web工作人員當前不支持任何版本的Internet Explorer。 – 2010-11-16 13:50:55

0

U可以嘗試,而不是遞歸性

+0

循環鎖定您的應用程序 – 2011-11-01 23:59:02

1

也許你應該查看關於javascirpt的工人(專門的Web Workers提供了一個簡單的方法讓web內容在後臺線程中運行腳本),這裏有一篇很好的文章,解釋了它的工作原理以及如何使用它。 HTML5 web mobile tutororial

相關問題