有三个setTimeout,要求按照以下顺序打印5秒,2秒,3秒

64 阅读1分钟
// 方法一
const delay = ms => new Promise(resolve => setTimeout(() => resolve(ms),ms))
function* gen() {
 const listOne = [5000,2000,8000]
 for (const value of listOne) {
  const n = yield delay(value)
  console.log(n.toString().substring(0,1) + '秒')
 }
}
(function go(gen) {
 const g = gen()
 next()
 function next(data) {
  const {value,done} = g.next(data)
  if (done) return
  value.then((data)=>{
   next(data)
  })
 }
})(gen)

// 方法二
async function log() {
 const setTimeoutLog = (ms) => new Promise(resolve => {
  setTimeout(()=>{
   console.log(ms.toString().substring(0,1) + '秒')
   resolve()
  },ms)
 })
 await setTimeoutLog(5000)
 await setTimeoutLog(2000)
 await setTimeoutLog(8000)
}
log()
```