求助一个 JavaScript setInterval 的问题

2017-03-23 16:11:39 +08:00
 jtsai

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

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

感谢~

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

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

我一直对箭头函数套箭头函数感到头疼.
shyling
2017-03-23 17:41:05 +08:00
本来就不准确(雾
xycool
2017-03-23 17:41:51 +08:00
var c=0
var t
function timedCount()
{
console.log(c);
c=c+1
t=setTimeout("timedCount()",c*1000);
}
timedCount();
Colorful
2017-03-23 17:54:40 +08:00
@jtsai 前台配置就更方便了...
Sparetire
2017-03-23 21:36:29 +08:00
如果可以 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
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
2017-03-23 22:46:14 +08:00
var c = 1000; var i = setInterval(k, 1000); function k() {console.log(c); clearInterval(i); c += 1000; i = setInterval(k, c);}
Parabolazz
2017-03-24 00:06:52 +08:00
用闭包即可解决
jtsai
2017-03-24 09:16:10 +08:00
@Sparetire 采纳你的 感谢~

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

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

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

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

© 2021 V2EX