鍍金池/ 問(wèn)答/HTML5  Java  HTML/ abcd四個(gè)方法。這幾個(gè)方法每個(gè)執(zhí)行五秒,順序隨機(jī)不停的循環(huán),如何實(shí)現(xiàn)

abcd四個(gè)方法。這幾個(gè)方法每個(gè)執(zhí)行五秒,順序隨機(jī)不停的循環(huán),如何實(shí)現(xiàn)

如果我有abcd四個(gè)方法。這幾個(gè)方法每個(gè)執(zhí)行五秒,順序隨機(jī)不停的循環(huán)有方法做嗎

回答
編輯回答
獨(dú)特范

你的意思是在5秒內(nèi)不停執(zhí)行a,b,c,d中的一個(gè),然后下一個(gè)5秒又隨機(jī)換一個(gè),不停循環(huán)?
這個(gè)一般控制一些展示效果,要求a,b,c,d等均能隨便打斷,且又可以進(jìn)入。

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)();
    }    
}
2018年1月28日 15:57
編輯回答
呆萌傻

有啊 只需要隨機(jī)給回調(diào)就行了!

2017年12月15日 03:00
編輯回答
伴謊

需要對(duì)abcd改造下:

題主說(shuō)每個(gè)方法執(zhí)行5秒,那我就假設(shè)為:

function a() {
    setTimeout(() => {
        // ok
    }, 5000);
}

這是我會(huì)加入一個(gè)callback給a(b, c, d)為參數(shù), 并使用鏈?zhǔn)诫S機(jī)循環(huán)執(zhí)行:

const a = (fn) => {
    setTimeout(() => {
        // 執(zhí)行其它
        console.log('a ok');
        fn();
    }, 5000);
}
// b, c, d與a類(lèi)似

// 隨機(jī)鏈?zhǔn)綀?zhí)行
const randomAsync = fns => {
    const len = fns.length;
    const next = () => fns[~~(Math.random() * len)](next);
    next();
}

使用

randomAsync([a, b, c, d])
2018年6月30日 03:00
編輯回答
不討囍

順序隨機(jī)是什么意思,這里提供個(gè)順序的,你參考下

function loop(fn){
    t = 5*1000
    var date = new Date()
    while(Date.now() - date < t){
        fn && fn()
    }
}
[a,b,c,d].forEach(loop)
2018年3月20日 19:38
編輯回答
放開(kāi)她
let queue = [a, b, c, d]
setInterval(() => {
  queue[Math.floor(Math.random() * queue.length)]()
}, 5000)
2018年6月13日 16:00