2

我在 Web Worker 中有一些 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);
};

除非事件为空,否则我看不到代码有问题,但这会导致错误,您也可以在控制台中看到该错误。

于 2013-06-30T05:47:01.330 回答
0

我的猜测是,在 setTimeout 的上下文中执行的 post 消息通常是未在 worker 中定义的 Window,尝试在 post 消息前添加 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

这是一个可以工作的网络工作者的一般结构。

// 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 回答