如果我有abcd四个方法。这几个方法每个执行五秒,顺序随机不停的循环有方法做吗
let queue = [a, b, c, d]
setInterval(() => {
queue[Math.floor(Math.random() * queue.length)]()
}, 5000)
你的意思是在5秒内不停执行a,b,c,d中的一个,然后下一个5秒又随机换一个,不停循环?
这个一般控制一些展示效果,要求a,b,c,d等均能随便打断,且又可以进入。
fns=[a,b,c,d];
t=5*1000;
while(true){
var datein=Date().now();
fn=fns[ Math.floor(Math.random()*4) ];
while(Date.now()-datein < t){
(fn)();
}
}
需要对abcd改造下:
题主说每个方法执行5秒,那我就假设为:
function a() {
setTimeout(() => {
// ok
}, 5000);
}
这是我会加入一个callback
给a(b, c, d)为参数, 并使用链式随机循环执行:
const a = (fn) => {
setTimeout(() => {
// 执行其它
console.log('a ok');
fn();
}, 5000);
}
// b, c, d与a类似
// 随机链式执行
const randomAsync = fns => {
const len = fns.length;
const next = () => fns[~~(Math.random() * len)](next);
next();
}
使用
randomAsync([a, b, c, d])
13 回答12.8k 阅读
7 回答1.9k 阅读
5 回答1.4k 阅读
3 回答1.1k 阅读✓ 已解决
5 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
顺序随机是什么意思,这里提供个顺序的,你参考下