Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Web Workers进行正确的错误处理?_Javascript_Error Handling_Web Worker - Fatal编程技术网

Javascript 如何使用Web Workers进行正确的错误处理?

Javascript 如何使用Web Workers进行正确的错误处理?,javascript,error-handling,web-worker,Javascript,Error Handling,Web Worker,我在应用程序中使用Web Workers来处理更繁重的计算。因此,我需要捕获工作线程中的错误,并将它们传递给主线程,以便在那里相应地处理它们。对我来说,重要的是我可以在运行时动态地向错误中添加自定义信息,因为我需要在主线程中使用它 我想是这样的(这不是应用程序代码,而是一个非常简单的示例,可以让大家理解这个消息): 网络工作者错误 //main.js const-worker=new-worker('./js/web-workers/fibonacci.js'); worker.addEve

我在应用程序中使用Web Workers来处理更繁重的计算。因此,我需要捕获工作线程中的错误,并将它们传递给主线程,以便在那里相应地处理它们。对我来说,重要的是我可以在运行时动态地向错误中添加自定义信息,因为我需要在主线程中使用它

我想是这样的(这不是应用程序代码,而是一个非常简单的示例,可以让大家理解这个消息):


网络工作者错误
//main.js
const-worker=new-worker('./js/web-workers/fibonacci.js');
worker.addEventListener('message',(e)=>{
log('MessageEvent:',e);
});
worker.addEventListener('error',(e)=>{
//在这里,我想以某种方式访问“fibonacci.js”中设置的“customProperty”
log('ErrorEvent:',e);
});
工.邮递(42);
//fibonacci.js
self.addEventListener('message',(e)=>{
试一试{
常数结果=斐波那契(即数据);
self.postMessage(结果);
}捕捉(错误){
常量错误=新错误(错误消息);
error.customProperty='这是我想在main.js中访问的内容';
投掷误差;
}
});
常数斐波那契=(num)=>{
设a=1,b=0,温度;
而(num>=0){
温度=a;
a=a+b;
b=温度;
num--;
}
返回b;
};

问题是
error
事件侦听器(
main.js
)中的
ErrorEvent
对象没有引用我在
fibonacci.js
中设置的
customProperty
。做这件事的好方法是什么?

它总是字符串吗?将其添加到应用程序中的message/@TKoL中是否有缺点?它将始终是一个整数(一个特定的id)。我不确定是否有负面影响。你的意思是,我应该将
customProperty
设置为一个对象,并通过
postMessage
将其发送回,而不是抛出错误吗?我的意思是,如果在
app.js
中,则在
worker.addEventListener('error')(e)=>
您可以访问在worker中设置的错误字符串,然后您可以在worker中抛出一个错误,该错误包含您想要的字符串消息。我不知道您到底在做什么,但让我们假设在worker中,当您在某些条件下出错时,您希望抛出一个错误并发送一些自定义数据,如计数。您可以这样做
在您的worker中抛出新错误('count={“count”:4}')
,然后在app.js中检查是否
count={
出现在您的错误字符串中,如果出现,请像JSON一样解析它,并使用itOr执行一些操作。您可以使用
postMessage
在发布的对象上设置
error
属性,然后在接收方函数中检查error属性是否为setYes,我也考虑了您的两个建议,但我不确定是否有一种“更好”的方法:)也许我同意第一种想法,在错误消息字符串中对属性进行编码。原因是我可以使用
main.js
中的
error
事件侦听器,如果worker出现问题,它对我来说似乎更干净一些。