我在网络工作者中有一些JavaScript代码,如下所示。
onmessage = function(event){
setTimeout(function(){
postMessage(event.data + " ,then sent back to the main thread");
}, 4000);
};
每当我运行代码时,设置超时部分基本上都会跳过而不执行。我的主要JavaScript代码每2秒调用一次工作,设置间隔在我的主要代码段中正常工作。但是这段代码不起作用。有人知道为什么吗?谢谢你的帮助。
答案 0 :(得分: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);
};
除非event为null,否则我看不到代码有问题,但这会导致错误,你也可以在控制台中看到它。
答案 1 :(得分:0)
我的猜测是post post消息在setTimeout的上下文中执行通常是Window,它没有在worker中定义,尝试在post消息前面添加self以确保它在正确的范围内。
self.onmessage = function(event){
setTimeout(function(){
self.postMessage(event.data + " ,then sent back to the main thread");
}, 4000);
};
答案 2 :(得分: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');
});