异步编程(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()
posted @ 2020-08-26 21:40  荣光无限  阅读(111)  评论(0编辑  收藏  举报