如何处理/抛出shared web worker
中的错误?
如果在dedicated web worker
中抛出这样的错误,则错误会出现在浏览器的控制台中..但是当工作人员被共享时却没有...!
使用专门的Web工作者,您还可以在worker中使用console.log()
但不能在共享Web worker中使用
var worker = new SharedWorker('js/webworker.js');
worker.port.onmessage = function(e){
console.log('From worker: '+e.data);
};
worker.port.onerror = function(e){
console.log(e.message+'\nLine: '+e.lineno+'\nFilename: '+e.filename);
};
worker.port.start();
worker.port.postMessage('This message should throw an error in the web worker');
var ports = [];
self.onconnect = function(e){
var port = e.ports[0];
ports.push(port);
port.onmessage = function(e){
port.postMessage(e.data);
throw Error('hehehe');
};
port.start();
port.postMessage('Worker connected!');
};
答案 0 :(得分:3)
正如文件所说:
每当在其中一个工作程序脚本中发生未捕获的运行时脚本错误时,如果在处理上一个脚本错误时未发生错误,则用户代理必须在包含该错误的资源的URL处报告错误。脚本,使用WorkerGlobalScope对象的onerror属性,在worker中运行的脚本的原点中,发生错误的位置(行号和列号)。
因此,错误将报告给self
,然后发送到所有端口:
self.onerror = function (e) {
ports.forEach(function (port) { port.postMessage(e); });
};
以下是演示它的jsfiddle:http://jsfiddle.net/nhrfgd1L/
答案 1 :(得分:0)
(2021 年 7 月)
作为对已给出答案的更新,对于 Sharedworkers 而言,仅在客户端(网页)编写相应的事件处理程序就足够了,如下所示: https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker/onerror
基本上就是这个函数:
worker.onerror = function(error) {
console.log('Worker error: ' + error.message + '\n');
};
error.message 包含错误的详细信息,如果您想显示它们或将它们放入日志中。
Sharedworker 本身不需要任何额外的代码来管理错误。