1

だから私はこのメインのjsファイルを持っています:

var worker = new Worker("../Scripts/worker.js");
worker.onmessage = function (event) {
    alert("Worker said : " + event.data);
};
worker.postMessage("Naruto");
worker.postMessage("Sakura");

そしてworker.jsはここにあります:

self.onmessage = function (event) {
      self.postMessage("Hi " + event.data);
};

self.postMessage("WHERE'S SASUKE? [1]");
self.postMessage("WHERE'S SASUKE? [2]");

それらが実際にどのように機能するかについて、私はまだ少し混乱しています。しかし、出てくるのはこれです(登場順):

Worker said: WHERE'S SASUKE? [1]
Worker said: WHERE'S SASUKE? [2]
Worker said: Hi Naruto
Worker said: Hi Sakura

ワーカーを開始するには、postMesage() を使用すると彼らは言いました。

最初の質問: メインの js ファイルが postMessage("Naruto") の場合、なぜワーカーは最初に 2 つの "WHERE'S SASUKE?" を表示したのですか? そしてナルトとサクラを表示?メインスレッドからデータを受け取ったので、最初に onMessage イベントをトリガーすることになっていませんか?

2 番目の質問: Message("Naruto") を投稿すると、"WHERE'S SASUKE?" という 2 つのメッセージが表示されました。しかし、postMessage("Sakura") を実行すると、2 つの "WHERE'S SASUKE?" が表示されないのはなぜですか? つまり、メインスレッドで postMessage() を 2 回呼び出したのに、「WHERE'S SASUKE」が 2 つしか表示されないのはなぜですか? worker.js を 2 回も「実行」することになっているので、「WHERE'S SASUKE?」が 4 つ表示されるのではないでしょうか? (教えてください)

4

1 に答える 1

1

何が起こっているのかを理解するのに役立ついくつかの注釈

main.js

var worker = new Worker("../Scripts/worker.js");

// register handler, 
// code is executed only when a message is received from worker
worker.onmessage = function (event) {
    alert("Worker said : " + event.data);
};

worker.js

// register onmessage handler , 
// code will not be executed at this point but only when you post a message
self.onmessage = function (event) {
      self.postMessage("Hi " + event.data);
};

// these are executed immediately
// they will be executed only once during the 'new Worker' part
self.postMessage("WHERE'S SASUKE? [1]");
self.postMessage("WHERE'S SASUKE? [2]");
于 2013-01-19T08:40:16.880 に答える