众所周知,js是单线程的,没法保持多个函数同时运行。一直没有找到外部中断某函数运行的方法。
应用场景是:我有一个js 下棋的AI程序,AI在思考某一步棋的时间可能要花很长时间去计算(可能超过一两分钟),在这个计算过程中,整个页面都处于一个假死状态,用户点结束或退出按钮都不会有反应,造成很不好的用户体验。想找一个方法,AI在计算时,点个按钮就强行中止它的计算。一直没找到好的方法解决这个问题。
4 回答

开满天机
TA贡献1786条经验 获得超13个赞
这个场景,使用ServiceWorker来进行高负载运行,然后再每次循环的是时候,判断下终止变量。通过外部发消息给ServiceWorker,来设置终止变量。
// 大致思路如下 var isStop = false; function run(){ if(!isStop){ while(){} // 高负载任务,注意,把长期的任务分解下。 } setTimeout(()=>fun()); // 通过延迟执行,才能让引擎接收外部消息 } run();

慕沐林林
TA贡献2016条经验 获得超9个赞
刚了解了一下ServiceWorker,该功能似乎支持的浏览器不多,并且还是试用阶段,不太敢用到产品中去。
web worker倒是一个比较好的思路,以前对这方面了解得很少。初步了解它不能跟dom交互,估计要用它我的程序也要做比较大的改动,我准备做一些偿试。
两位的回答对我都很有帮助,开阔了我的思路。非常感谢!
添加回答
举报
0/150
提交
取消