[英]How can I prevent a function from running more than once when multiple change events are fired at once?
[英]Run js function once when fired more than once
我有一個使用jQuery加載帶有javascript函數的文件/內容的Div。
function DoWork() {
// Do Stuff
}
假設用戶可以重新加載Div並使用相同的js函數DoWork()拉出相同的文件/內容。 問題是,當重新加載文件時,先前加載的函數DoWork()仍在運行。 如何殺死先前解雇的DoWork()並重新啟動它?
Javascript是單線程的,這意味着在給定時刻只能執行一件事。 如果DoWork
已經“運行”,那么要么a)阻止所有其他JS代碼,你別無選擇,只能讓它完成,因為你無法執行任何中斷代碼,直到它自己完成,或者b) DoWork
被安排通過setTimeout()
或setInterval()
在一個間隔上觸發。
如果是后一種情況,則setTimeout()
和setInterval()
返回一個ID。 將ID存儲在某處,並根據啟動方式調用clearTimeout(doWork_timeout_id)
或clearInterval(doWork_interval_id)
。
您可以構建一個使用:setTimeout的簡單函數,然后每次調用DoWork將首先調用:clearTimeout。 我真的不喜歡這個解決方案,因為你會在setTimeout上浪費CPU。 所以另一種選擇是在DoWork中使用Web worker(如果你在另一個線程中運行大數據的話,它將為你做很多其他的好事) - 然后你可以選擇發送'stop'消息你開始DoWork()工作的時候了。
你使用ajax加載div的內容嗎? 如果是這樣,更好的方法如下:
var doWorkAjax=null;
function DoWork(){
if (doWorkAjax) doWorkAjax.abort();
doWorkAjax = $.ajax(url, data, function(result){
....
doWorkAjax=null;
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.