面试题答案
一键面试1. 在 Worker 脚本中抛出错误
在 Worker 脚本中,可以使用 postMessage
方法将错误信息发送回主脚本。
// worker.ts
self.onmessage = function (event) {
try {
// 模拟任务
if (event.data === 'error') {
throw new Error('任务执行出错');
}
// 正常处理任务
self.postMessage('任务成功完成');
} catch (error) {
self.postMessage({
error: true,
message: (error as Error).message
});
}
};
2. 在主脚本中捕获和处理错误
主脚本通过监听 message
事件来接收 Worker 脚本发送的消息,并对错误进行处理。
// main.ts
const worker = new Worker('worker.ts');
worker.onmessage = function (event) {
if ((event.data as { error: boolean }).error) {
console.error('Worker 脚本错误:', (event.data as { message: string }).message);
} else {
console.log('Worker 脚本成功:', event.data);
}
};
worker.onerror = function (error) {
console.error('主脚本与 Worker 脚本通信异常:', error);
};
// 向 Worker 脚本发送数据
worker.postMessage('正常数据');
// 模拟触发错误
worker.postMessage('error');
3. 错误处理流程说明
- Worker 脚本中:在任务执行过程中,如果出现错误,通过
catch
块捕获错误,并使用postMessage
方法将错误信息发送回主脚本。 - 主脚本中:通过监听
worker
的message
事件,判断接收到的数据是否包含错误标识error
,如果包含则处理错误信息;同时通过监听worker
的error
事件来捕获主脚本与 Worker 脚本通信出现的异常。