2014-09-06 78 views
-1
function set_worker(){ 

     demo_worker = new Worker("worker.js"); 

     demo_worker.onmessage = function(event){ 
      demo_A = event.data; 
      console.log(demo_A); // success. I get some result 
     } 

    } 
    set_worker(); 
    console.log(demo_A); //undefined. i get undefined.. 

我想訪問「demo_A」。爲什麼是demo_Aundefined?有沒有辦法訪問demo_A?如何訪問網絡工作者中的變量?

+1

您需要顯示更多信息。什麼時候調用'console.log(demo_A)'關於'set_worker()'?你可能應該在web worker中的'onmessage'裏面觸發一些事件,這樣任何聽衆都知道這個變化 – CodingIntrigue 2014-09-06 07:34:43

+0

你從來沒有聲明過'demo_A' ......你想知道爲什麼它是未定義的。 – 2014-09-06 08:31:36

回答

1

1.製作demo_A全球

您已在demo_worker.onmessage()函數中定義該變量。 其上下文將僅保留在函數內部。使其成爲全局函數。

2.收到消息時觸發某些功能。

demo_A在收到消息時更新,所以如果您在收到消息之前打印demo_A,那麼它可能是undefined或可能有一些舊值。

var demo_A ;//make it global 
somefunction function(){//triggered when msg recieved 
    console.log(demo_A); 
    //do other stuff 
} 
function set_worker(){ 

     demo_worker = new Worker("worker.js"); 

     demo_worker.onmessage = function(event){ 
      demo_A = event.data; 
      console.log(demo_A); 
      somefunction(); // trigger some function 
     } 

    } 
    set_worker(); 
+0

謝謝。我不知道我怎麼說...實際上我想在主線程中使用'demo_A'。無論如何非常感謝你幫助我。 – user3886365 2014-09-06 08:32:49

+0

@ user3886365不客氣!如果我的答案符合您的需求,請不要忘記接受它(對於您提出的其他問題也是如此:) http://meta.stackexchange.com/a/5235/186921 – 2014-09-06 08:40:14