请教一个问题: js 定时器清除

2020 年 3 月 18 日
 qiutian00
清除 js 定时器的时候,可能这个定时器的执行函数正在被执行,产生了一些界面的效果(如画了一个人的实时运动轨迹路线),界面显示可能就有残留; 这个有办法解决么?
2128 次点击
所在节点    问与答
9 条回复
AcoStory
2020 年 3 月 18 日
把代码贴出来,本大神给你看看
qiutian00
2020 年 3 月 18 日
@AcoStory 代码就不贴了,在公司遇到的问题
erguotou521
2020 年 3 月 18 日
等定时器里的逻辑跑完再清啊
rabbbit
2020 年 3 月 18 日
let stop;
function loop(mi) {
...if (stop) {
......return;
...}
...// do ...
...setTimeout(() => {
......loop();
...}, mi);
}
loop(mi);

// 停止循环
stop = true;
qiutian00
2020 年 3 月 18 日
@erguotou521 ,很多个定时器哦
qiutian00
2020 年 3 月 18 日
@rabbbit , 会不会在执行 do 部分内容时( do 部分内容很复杂,执行时间较长),点击某个操作,想显示其他内容:可能 do 执行的残留还是显示在界面
rabbbit
2020 年 3 月 18 日
@qiutian00
这个得自己控制内部流程,在所有有必要的地方判断是否要停止.
要是觉得写一堆 if(stop) 太难看,也可以用生成器.

function* process() {
...console.log("流程 1");
...yield;
...console.log("流程 2");
...yield;
...console.log("流程 3");
...yield;
}

let stop;
function run() {
...const iterator = process();
...for (let i of iterator) {
...if (stop) return;
...}
}

run();
rabbbit
2020 年 3 月 18 日
也可以用生成器. -> 也可以用生成器控制流程
qiutian00
2020 年 3 月 18 日
@rabbbit 好的好的,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654039

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX