有什么方法可以在网络工作者关闭之前执行操作吗?

Is there any way to perform an action before a web worker closes?

我正在编写一个事件记录器,使用网络工作者在辅助进程中处理它。工作人员在本地收集事件,然后每隔几秒将它们作为批次发送出去。

我需要一种方法来在浏览器或选项卡关闭时发送任何未发送的批次。网络工作者有什么办法可以监听 onclose 事件之类的东西吗?

我意识到我可以在应用程序本身中执行此操作,但记录器是一个节点包,将在多个地方使用,我不想让前端负责清理事件记录器.

Web Worker 规范的 processing model 部分没有提及任何内容,特别是 "Kill a Worker" 和 "Terminate a Worker" 部分。我认为您没有太多选择,只能让 UI 线程上的代码向 worker 发送一条消息,告诉它进行清理。

看起来你可以做 self.onclose = function() { ... };,当 worker 关闭时它会被调用。更多可以阅读here。由于工作人员有自己的上下文,因此您必须通过 WorkerGlobalScope 访问范围。公开的 WorkerGlobalScope.self 应该允许您访问 onclose().

等事件

这里的警告似乎是 API 没有标准化。您必须检查您的浏览器以查看它是否受支持(看起来 Microsoft 尚未实现此功能,祝您 IE/Edge 好运)。目前最好的跨平台方式可能是@T.J。 Crowder 建议在 UI 上设置代码以要求工作人员关闭。