为了账号安全,请及时绑定邮箱和手机立即绑定

js中如何从外部中断某函数的执行??

js中如何从外部中断某函数的执行??

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

4 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

这个场景,使用ServiceWorker来进行高负载运行,然后再每次循环的是时候,判断下终止变量。通过外部发消息给ServiceWorker,来设置终止变量。

// 大致思路如下
var isStop = false;
function run(){
  if(!isStop){
    while(){} // 高负载任务,注意,把长期的任务分解下。
  }
  setTimeout(()=>fun()); // 通过延迟执行,才能让引擎接收外部消息
}
run();
查看完整回答
反对 回复 2018-12-24
?
慕沐林林

TA贡献2016条经验 获得超9个赞

刚了解了一下ServiceWorker,该功能似乎支持的浏览器不多,并且还是试用阶段,不太敢用到产品中去。

web worker倒是一个比较好的思路,以前对这方面了解得很少。初步了解它不能跟dom交互,估计要用它我的程序也要做比较大的改动,我准备做一些偿试。

两位的回答对我都很有帮助,开阔了我的思路。非常感谢!

查看完整回答
反对 回复 2018-12-24
  • 4 回答
  • 0 关注
  • 577 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号