利用Generator实现按顺序执行异步操作

471 阅读1分钟
function run (taskDef) {
  let task = taskDef()

  function step() {
    let result = task.next();
    if (result.done)  return
    result.value && result.value.then( res => {
      console.log('this is then')
      step()
    })
  }

  step()
}

function* foo() {
  let arr = [4,3,2,1]
  for (let i of arr) {
    yield fetch(i)
  }
}

function fetch(i) {
  return new Promise( resolve => {
    setTimeout( () => {
      console.log(i)
      resolve()
    }, 1000*i)
  })
}

run(foo)

总结

简单粗暴直接贴代码哈哈,有什么不懂的在评论区留言,我再进行完善解答。