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

求助一个 JavaScript setInterval 的问题

  •  
  •   jtsai · 2017-03-23 16:11:39 +08:00 · 1736 次点击
    这是一个创建于 2806 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我希望每次执行延迟的秒数都不一样

    例如 setInterval(function(){}, 1 秒) //第一次 setInterval(function(){}, 2 秒) //第二次

    感谢~

    23 条回复    2017-03-25 12:03:04 +08:00
    jtsai
        1
    jtsai  
    OP
       2017-03-23 16:13:29 +08:00
    我讲明白我要干什么了吗 哈哈
    jtsai
        2
    jtsai  
    OP
       2017-03-23 16:15:05 +08:00
    或者传授我 JavaScript 怎么 死循环 然后在循环里面实现像 Python 一样的同步 sleep 功能。这家伙异步来异步去的 不知道在搞什么
    chemzqm
        3
    chemzqm  
       2017-03-23 16:18:22 +08:00
    setTimeout 套 setTimeout
    jtsai
        4
    jtsai  
    OP
       2017-03-23 16:20:34 +08:00
    @chemzqm setTimeout 没有循环功能啊? 在 setInterval 里面执行 setTimeout 。 setInterval 不管你 异步继续循环
    izhaohui
        5
    izhaohui  
       2017-03-23 16:24:15 +08:00 via Android   ❤️ 1
    感觉你还是适应一下异步吧,每个语言有每个语言的套路, nodejs 的话还好,你要是在 web 端来个死循环, UI 就不用渲染了
    chemzqm
        6
    chemzqm  
       2017-03-23 16:25:13 +08:00   ❤️ 1
    setTimeout 内的函数递归调用自己
    jtsai
        7
    jtsai  
    OP
       2017-03-23 16:31:48 +08:00
    @izhaohui 就自己想写个小脚本去请求些一些东西过来 就随便搞了
    Colorful
        8
    Colorful  
       2017-03-23 16:32:32 +08:00   ❤️ 1
    有两个方法吧,一个是加一个缓存,然后每次取出的时候,缓存加 1
    另外一个方法是从后台那边取值...
    能想到的就这两个方法吧
    jtsai
        9
    jtsai  
    OP
       2017-03-23 16:36:11 +08:00
    @Colorful 值是我前台配置几秒 打算去请求的
    jtsai
        10
    jtsai  
    OP
       2017-03-23 16:41:22 +08:00
    @Colorful 而且不知道怎么配置值 我想搞的数组去 pop , setInterval 读取一次延迟秒数 然后就按照这个死循环了,不继续 pop 了
    jimliang
        11
    jimliang  
       2017-03-23 17:08:35 +08:00   ❤️ 2
    ```
    var exec = (func, interval = 1000) => setTimeout(() => (func(), exec(func, interval * 2)), interval)

    exec(function () {
    console.log(new Date().getSeconds())
    })
    ```
    sensui7
        12
    sensui7  
       2017-03-23 17:22:12 +08:00
    @jimliang

    我一直对箭头函数套箭头函数感到头疼.
    shyling
        13
    shyling  
       2017-03-23 17:41:05 +08:00
    本来就不准确(雾
    xycool
        14
    xycool  
       2017-03-23 17:41:51 +08:00   ❤️ 1
    var c=0
    var t
    function timedCount()
    {
    console.log(c);
    c=c+1
    t=setTimeout("timedCount()",c*1000);
    }
    timedCount();
    Colorful
        15
    Colorful  
       2017-03-23 17:54:40 +08:00
    @jtsai 前台配置就更方便了...
    Sparetire
        16
    Sparetire  
       2017-03-23 21:36:29 +08:00   ❤️ 1
    如果可以 es6/es7 的话,可以这样
    ```
    function wait(time) {
    return new Promise(rs => setTimeout(rs, time));
    }

    async function run() {
    for (let i = 0;; ++i) {
    console.log(i);
    await wait(1000 * i);
    }
    }

    run();
    ```
    Sparetire
        17
    Sparetire  
       2017-03-23 21:41:03 +08:00
    没有 es6 的话就这样
    ```
    var interval = 1000, i = 1;
    setTimeout(function () {
    console.log(i++);
    setTimeout(arguments.callee, interval * i);
    }, interval);
    ```
    zingl
        18
    zingl  
       2017-03-23 22:46:14 +08:00   ❤️ 1
    var c = 1000; var i = setInterval(k, 1000); function k() {console.log(c); clearInterval(i); c += 1000; i = setInterval(k, c);}
    Parabolazz
        19
    Parabolazz  
       2017-03-24 00:06:52 +08:00 via Android
    用闭包即可解决
    jtsai
        20
    jtsai  
    OP
       2017-03-24 09:16:10 +08:00
    @Sparetire 采纳你的 感谢~
    jtsai
        21
    jtsai  
    OP
       2017-03-24 09:18:11 +08:00
    @Sparetire strict 模式下面 有替代 arguments.callee 的方案吗
    Sparetire
        22
    Sparetire  
       2017-03-25 12:01:04 +08:00 via Android
    @jtsai 这里是个递归,所以如果不用 arguments.callee 就给匿名函数起个名字,用函数名
    Sparetire
        23
    Sparetire  
       2017-03-25 12:03:04 +08:00 via Android
    @Sparetire 口误,严格来讲也不算递归
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 115ms · UTC 13:36 · PVG 21:36 · LAX 05:36 · JFK 08:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.