一道题目,实现延时队列,结构是 value 和 time,time 表示延时时间,队列里数据顺序执行(避免并发),有知道 eventloop 每次 tick 会取出一个 promise 的特性可以实现,还有其他什么办法么?
注意:纯 JS
一道题目,实现延时队列,结构是 value 和 time,time 表示延时时间,队列里数据顺序执行(避免并发),有知道 eventloop 每次 tick 会取出一个 promise 的特性可以实现,还有其他什么办法么?
注意:纯 JS
|
ZenykFeb 5, 2020
1
generate、requestanimationframe
|
|
lovedebugFeb 5, 2020
2
生成器 + promise 可以实现
|
|
rabbbitFeb 5, 2020
3
function sleep(time) {
return new Promise(resolve => { setTimeout(() => { resolve(); }, time); }); } async function queue(jobs, func) { console.log(jobs); for (let i of jobs) { await sleep(i.time) func(i.value) } } const jobs = [ { value: 1, time: 1000 }, { value: 2, time: 1000 }, { value: 3, time: 1000 }, { value: 4, time: 1000 }, { value: 5, time: 1000 } ]; queue(jobs, (value)=> console.log(value)); |
|
f0rgerFeb 5, 2020 via iPhone
4
Promise,Array.reduce
|
|
rabbbitFeb 5, 2020
5
function sleep(time) {
return new Promise(resolve => { setTimeout(() => { resolve(); }, time); }); } async function* queue(jobs) { for (let i of jobs) { await sleep(i.time) yield i.value } } const jobs = [ { value: 1, time: 1000 }, { value: 2, time: 1000 }, { value: 3, time: 1000 }, { value: 4, time: 1000 }, { value: 5, time: 1000 } ]; (async function(){ for await (let i of queue(jobs)) { console.log(i); } })(); |