abcd四个方法。这几个方法每个执行五秒,顺序随机不停的循环,如何实现

如果我有abcd四个方法。这几个方法每个执行五秒,顺序随机不停的循环有方法做吗

阅读 3.2k
5 个回答

顺序随机是什么意思,这里提供个顺序的,你参考下

function loop(fn){
    t = 5*1000
    var date = new Date()
    while(Date.now() - date < t){
        fn && fn()
    }
}
[a,b,c,d].forEach(loop)
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])

有啊 只需要随机给回调就行了!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题