2011-04-20 70 views
0

我構建一個JavaScript小應用程序,但現在我已經到發生衝突的嚴重問題。如何協調兩個功能與計時器 - > JavaScript的

我使用至少3個功能與他們定時器(第1兩個連續運行),二者都使用一些全局變量(在這種情況下,他們需要的,因爲一些功能是全球性的)。 這些3的外部功能沒有定時器。其中一個定時器功能僅在採取特定操作時纔會激活,並影響第二個功能(現在我已將其禁用)。儘管如此,當這個定時器函數結束時,另一個仍在運行,試圖獲得一些不連貫的數據(試圖在矩陣上精確地得到負索引)並崩潰(標誌被切換,但主數據尚未修復 - >像一個多線程問題)。

我要問的是,有沒有辦法讓一個函數「等待」另一在javascript結束?或者以任何其他方式或協調它們之間的功能(以互斥體樣式或類型)?

+0

此JavaScript在瀏覽器中,或JavaScript在一些獨立的環境,如Rhino或Node.js? – Pointy 2011-04-20 18:46:56

+0

解決方案:沒有全局變量,最小化範圍範圍,使用消息傳遞。 – Raynos 2011-04-20 18:48:51

回答

1

JavaScript是單線程的,所以這將是幾乎不可能拿出任何形式的「多線程」式的解決方案。我會嘗試想出一些方法來使用單個函數和一個計時器,並用標誌處理不同的邏輯塊。例如,如果設置了標誌A,那麼也許你可以做一塊邏輯,然後設置標誌B.當定時器再次觸發時,可以執行標誌B邏輯(使用相同的功能)。

從更積極的方面,但它似乎HTML5 will support multithreading,這是令人鼓舞的,但它並沒有真正在手解決問題。

+0

Thx爲答案,我會盡力 – John 2011-04-20 18:56:57

1

的Javascript實際上是單線程的,但計時器執行異步

如果這是在瀏覽器中運行,那麼我強烈建議使用jQuery的新「延遲」對象,或任何其他實現類似的框架。

這些允許您僅在完成一組異步事件的全部時觸發另一個回調,這可能正是您所需要的。

+0

thx的建議(是的,它是一個瀏覽器應用程序),仍然我想使用純JavaScript的第一個項目上它,以更好地理解它 – John 2011-04-20 19:04:23