V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qiutian00
V2EX  ›  问与答

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

  •  
  •   qiutian00 · 2020-03-18 21:30:23 +08:00 · 1450 次点击
    这是一个创建于 1703 天前的主题,其中的信息可能已经有所发展或是发生改变。
    清除 js 定时器的时候,可能这个定时器的执行函数正在被执行,产生了一些界面的效果(如画了一个人的实时运动轨迹路线),界面显示可能就有残留; 这个有办法解决么?
    9 条回复    2020-03-18 22:53:51 +08:00
    AcoStory
        1
    AcoStory  
       2020-03-18 22:04:44 +08:00
    把代码贴出来,本大神给你看看
    qiutian00
        2
    qiutian00  
    OP
       2020-03-18 22:13:28 +08:00
    @AcoStory 代码就不贴了,在公司遇到的问题
    erguotou521
        3
    erguotou521  
       2020-03-18 22:22:17 +08:00 via Android
    等定时器里的逻辑跑完再清啊
    rabbbit
        4
    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
        5
    qiutian00  
    OP
       2020-03-18 22:31:51 +08:00
    @erguotou521 ,很多个定时器哦
    qiutian00
        6
    qiutian00  
    OP
       2020-03-18 22:38:00 +08:00
    @rabbbit , 会不会在执行 do 部分内容时( do 部分内容很复杂,执行时间较长),点击某个操作,想显示其他内容:可能 do 执行的残留还是显示在界面
    rabbbit
        7
    rabbbit  
       2020-03-18 22:49:19 +08:00   ❤️ 1
    @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
        8
    rabbbit  
       2020-03-18 22:50:01 +08:00
    也可以用生成器. -> 也可以用生成器控制流程
    qiutian00
        9
    qiutian00  
    OP
       2020-03-18 22:53:51 +08:00
    @rabbbit 好的好的,感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:00 · PVG 18:00 · LAX 02:00 · JFK 05:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.