2013-10-06 85 views
2

我在JavaScript中有一個名爲AddElementToDom()的函數,它在數組上運行一個循環並向Dom(其中很多需要很長時間)添加元素。該函數正在從不同的事件中調用。我想確保在啓動另一個AddElementToDom之前,對這個函數的每個調用都在等待之前的調用完成該函數。我的想法是做像lock()在C#中。但我無法在JavaScript中找到一個。實施鎖定的最佳方式是什麼?如何在javascript中鎖定

+0

如果您使用異步方式,請查找「承諾模式」。 – elclanrs

回答

2

Javascript是單線程的,所以你沒有併發問題。因此,沒有鎖。鎖意在解決併發問題。

雖然你可能仍然想要邏輯說「操作Foo應該運行,直到操作欄完成」。像:

var operationBarIsCompleted = false; 

function foo() { 
    if(!operationBarIsCompleted) { 
     return; 
    } 
// ... 
} 

function bar() { 
    // ... 
    operationBarIsCompleted = true; 
} 

但現在我只是爲你編寫編程邏輯。

但是,如果這是事件驅動,那麼您需要學習如何使用異步代碼和回調。我無法通過SO回答這個問題。 plenty of resources on GoogleStackOverflow

+0

但是,如果函數寫入像jquery Closures? –

+1

@HaddarMacdasi在我的回答中看到最後兩行。也可以嘗試發佈更具體的問題。 – djechlin

+0

我在函數內部添加了「alert(1)」,並且我得到了10個提醒,一個在另一個之上,它表明該函數並行執行多次,我需要的是每個執行都要等到最後一個結束。 –