手写一个带有并发限制的异步调度器
1 | /** |
最近看到一道面试题,题目如下:
红灯三秒亮一次,绿灯一秒亮一次,黄灯2秒亮一次;如何让三个灯不断交替重复亮灯?(用 Promise 实现)
三个亮灯函数已经存在:1
2
3
4
5
6
7
8
9function red(){
console.log('red');
}
function green(){
console.log('green');
}
function yellow(){
console.log('yellow');
}
利用 then 和递归实现:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35function red(){
console.log('red');
}
function green(){
console.log('green');
}
function yellow(){
console.log('yellow');
}
const lightUp = (timmer, callback) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
callback();
resolve();
}, timmer);
})
}
const trafficStep = () => {
Promise.resolve()
.then(() => {
return light(3000, red);
})
.then(() => {
return light(2000, green);
})
.then(() => {
return light(1000, yellow);
})
.then(() => {
trafficStep(); // 执行完毕后,递归执行
})
}
trafficStep()
执行效果如图所示