我在JavaScript中有一個名爲AddElementToDom()的函數,它在數組上運行一個循環並向Dom(其中很多需要很長時間)添加元素。該函數正在從不同的事件中調用。我想確保在啓動另一個AddElementToDom之前,對這個函數的每個調用都在等待之前的調用完成該函數。我的想法是做像lock()在C#中。但我無法在JavaScript中找到一個。實施鎖定的最佳方式是什麼?如何在javascript中鎖定
回答
Javascript是單線程的,所以你沒有併發問題。因此,沒有鎖。鎖意在解決併發問題。
雖然你可能仍然想要邏輯說「操作Foo應該運行,直到操作欄完成」。像:
var operationBarIsCompleted = false;
function foo() {
if(!operationBarIsCompleted) {
return;
}
// ...
}
function bar() {
// ...
operationBarIsCompleted = true;
}
但現在我只是爲你編寫編程邏輯。
但是,如果這是事件驅動,那麼您需要學習如何使用異步代碼和回調。我無法通過SO回答這個問題。 plenty of resources on Google和StackOverflow。
但是,如果函數寫入像jquery Closures? –
@HaddarMacdasi在我的回答中看到最後兩行。也可以嘗試發佈更具體的問題。 – djechlin
我在函數內部添加了「alert(1)」,並且我得到了10個提醒,一個在另一個之上,它表明該函數並行執行多次,我需要的是每個執行都要等到最後一個結束。 –
- 1. 如何鎖定Javascript中的線程?
- 2. 如何在php/html/javascript上鎖定/解鎖鼠標滾動條?
- 3. 如何在Javascript中使用鼠標鎖定?
- 4. 鎖定在JavaScript中使用Node.js語言
- 5. 如何使用javascript/jquery鎖定特定div中的焦點
- 6. PHP中session_start如何鎖定?
- 7. 如何鎖定在SQL
- 8. 如何在GMSMapView中鎖定GMSCameraPosition運動
- 9. 如何在NodeJS中鎖定(互斥)?
- 10. 如何在android中鎖定設備
- 11. 如何在Java中鎖定框架(GUI)
- 12. 如何在C中鎖定文件夾#
- 13. 如何在php中鎖定mysql表
- 14. 如何在OpenMP中使用鎖定?
- 15. 如何在MySQL中鎖定一行?
- 16. 如何在Windows中鎖定屏幕?
- 17. 如何在Java中鎖定序列化?
- 18. 如何在Sony Vegas中鎖定圖層?
- 19. 如何避免在MongoDB中鎖定
- 20. 如何將鼠標鎖定在JFrame中
- 21. 如何在Actionscript中鎖定文件?
- 22. 如何在PHP中鎖定文件?
- 23. 在auth0鎖定中,如何刷新id_token?
- 24. 如何在UINavigationControllers中鎖定方向
- 25. 如何在線程中使用鎖定
- 26. 在C#中,你如何鎖定表單?
- 27. 如何在asp.net中鎖定控件?
- 28. 如何在buildbot中鎖定步驟
- 29. 如何在android中鎖定TouchImageView?
- 30. 鎖定在ADO.NET中的表鎖定
如果您使用異步方式,請查找「承諾模式」。 – elclanrs