2015-02-10 252 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); 
    }