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

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

// 停止循环
stop = true;
qiutian00
2020-03-18 22:31:51 +08:00
@erguotou521 ,很多个定时器哦
qiutian00
2020-03-18 22:38:00 +08:00
@rabbbit , 会不会在执行 do 部分内容时( do 部分内容很复杂,执行时间较长),点击某个操作,想显示其他内容:可能 do 执行的残留还是显示在界面
rabbbit
2020-03-18 22:49:19 +08:00
@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-03-18 22:50:01 +08:00
也可以用生成器. -> 也可以用生成器控制流程
qiutian00
2020-03-18 22:53:51 +08:00
@rabbbit 好的好的,感谢

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

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

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

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

© 2021 V2EX