2015-02-10 289 views
-2

我有一個webworker在後臺執行某些操作。完成後,會觸發一個事件。我想暫停執行我的程序,直到我得到該事件。總之,我需要等待這個事件發生,並在它被解僱後,我需要恢復我的其餘功能。我一直在搜索整個互聯網,我找不到合適的解決方案。等待webworker完成

var worker = new Worker(workInBackground); 
var workInBackground = function() { 

//some stuff 

$(document).trigger("done") 
} 

我需要暫停「完成」才能被解僱,然後繼續我的調用堆棧。我真的很感謝這裏的一些幫助

+0

如果'some stuff'是同步代碼,那麼你的代碼將會正常,但如果它是異步的,比如Ajax,則需要將其設置爲回調。這是你的情況嗎?不知道你在做什麼,很難寫出答案。 – blex 2015-02-10 21:58:06

+0

@blex它的異步。謝謝回覆。我真的很感激 – user3246489 2015-02-10 22:01:45

+0

好吧,如果你仍然不知道該怎麼做,那麼異步代碼正在運行?類似於'setTimeout','$ .ajax()'?應該從他們(作爲回調)觸發「完成」事件,而不是在外面。 – blex 2015-02-10 22:06:23

回答

-1

只是一個計時器,檢查一個變量。

var checkWorkDone = false; 
    var workController = setInterval(function(){ CheckWork() }, 200); 

    function CheckWork() { 
     console.log("checkWorkDone = " + checkWorkDone); 
     if(checkWorkDone == true) 
     { 
      goOnToDoNextJob(); 
     } 
    } 

    // when checkWorkDone == true, the work is done, so stop workController; 
    function goOnToDoNextJob() { 
     clearInterval(workController); 
    } 

    // this is just for checking, set var work done after 5 sec 
    var testWorker = setInterval(function(){ DoJob() }, 5000); 
    function DoJob() 
    { 
     checkWorkDone = true; 
     clearInterval(testWorker); 
    }