我正在做一个网络项目,它需要相当多的计算,我使用网络工作者来做这件事.网页上还有一个按钮,只要用户点击它,就应该终止工作人员的计算.然而,当我在Web Worker中编写了一个无限循环进行测试时,网页被卡住了,我无法与其交互.

//When the worker is created
worker = new Worker("./scripts/testWorker.js");

//When the button is clicked
worker.terminate();
worker = undefined;

如何解决这个问题?或者,有没有其他方法可以达到执行易碎计算的目标?

推荐答案

在工作线程的无限循环中,有一个postMessage函数.因此,主线程中的onmessage函数被快速调用.因此,当工人启动时,主线卡住了.在工作线程的无限循环中删除这postMessage解决了这个问题.

Javascript相关问答推荐

IMDB使用 puppeteer 加载更多按钮(nodejs)

单击子元素时关闭父元素(JS)

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

为什么我的列表直到下一次提交才更新值/onChange

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

setcallback是什么时候放到macrotask队列上的?

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

如何使onPaste事件与可拖动的HTML元素一起工作?

Reaction Native中的范围滑块

如何在.NET Core中将chtml文件链接到Java脚本文件?

Jest toHaveBeenNthCalledWith返回当前设置的变量值,而不是调用时的值

如何确保预订系统跨不同时区的日期时间处理一致?

用于部分字符串的JavaScript数组搜索

Reaction即使在重新呈现后也会在方法内部保留局部值

使用可配置项目创建网格

如何在Reaction中清除输入字段

如何用react组件替换dom元素?

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据

正在发出错误的URL请求

使用导航时,路径的所有子组件都必须是路径