异步编程(Asynchronous) - 15 交通灯循环闪烁
function red() {
console.info('red')
}
function green() {
console.info('green')
}
function yellow() {
console.info('yellow')
}
/**
* 执行闪烁并返回Promise
* @param {*} duration : 时长
* @param {*} callback : 回调函数
* @return promise 让其可以继续链式调用then
*/
const flash = (duration, callback) => {
return new Promise(resolve => {
setTimeout(() => {
callback()
resolve(callback.name)
}, duration);
})
}
const starter = () => {
Promise.resolve('init fn')
.then((res) => {
console.info('fn name:', res)
return flash(3000, red)
}).then((res) => {
console.info('fn name:', res)
return flash(1000, green)
}).then((res) => {
console.info('fn name:', res)
return flash(2000, yellow)
}).then((res) => {
console.info('fn name:', res)
return starter()
})
}
starter()
Keep learning