2

以下に示すように、Web ワーカーに JavaScript コードがいくつかあります。

onmessage = function(event){
    setTimeout(function(){
        postMessage(event.data + " ,then sent back to the main thread");
    }, 4000);
};

コードを実行するたびに、設定されたタイムアウト部分は基本的に実行せずにスキップします。私のメインの JavaScript コードは、設定された間隔で 2 秒ごとにワーカーを呼び出します。これはコードのメイン セクションで正しく機能します。ただし、コードのこのセクションは機能していません。理由を知っている人はいますか?助けてくれてありがとう。

4

3 に答える 3

0

これの出力を見ることができますか?

onmessage = function(event){
    console.log("onmessage event is:",event);
    setTimeout(function(){
        console.log("timeout from onmessage, event is:",event);
        postMessage(event.data + " ,then sent back to the main thread");
    }, 4000);
};

イベントがnullでない限り、コードに問題はありませんが、それによりエラーが発生し、コンソールでも確認できます。

于 2013-06-30T05:47:01.330 に答える
0

私の推測では、投稿メッセージは通常 setTimeout is Window のコンテキストで実行されており、これはワーカーで定義されていません。投稿メッセージの前に self を追加して、正しいスコープにあることを確認してください。

self.onmessage = function(event){
    setTimeout(function(){
        self.postMessage(event.data + " ,then sent back to the main thread");
    }, 4000);
};
于 2013-08-06T21:50:04.397 に答える
0

これは、機能する Web ワーカーの一般的な構造です。

// I've found this syntax for handling the initial message event
// to be the most reliable
self.addEventListener('message', function(e) {

  // Do what you need to do here, i.e:
  // for (var p in self) { result += '\n' + p + '=' + self[p]; }
  // and then post 'result' as the return message on log it from
  // the main thread to discover what objects are exposed by the
  // VM inside the worker.

  // Then 'return' the result
  self.postMessage('this is my response');
});
于 2013-08-06T22:13:37.307 に答える