JavaScript 手写 setTimeout 及 同步调用和异步调用

demo

let timeout = (sec, num) => {
  const now = new Date().getTime() // 获取进入方法时的时间
  let flag = true
  let count = 0
  while (flag) {
    count++
    const after = new Date().getTime() // 执行到此的时间
    const dealy = sec * 1000
    if (after - dealy >= now) { // 比较是否已经过了设置的时间
      flag = false
    }
  }
  return new Promise((resolve, reject) => {
    resolve(num * num)
  })
}


// 使用async包装返回Promise的方法
async function tryWithAsync(sec, num) {
  const res = await timeout(sec, num)
  return res
}
tryWithAsync(3, 10).then(value => console.info(value)) // 🚀🚀 100


// 直接调用返回Promise的方法
let result = ''
const res = timeout(1, 20)
console.info(res) // 🚀🚀 Promise { 400 }
// 返回的是一个promise,promise中resolve中的值需要在then中拿到
res.then(x => { // 微任务先执行
  console.info(x) // 🚀🚀 400
})
posted @ 2020-08-05 15:53  荣光无限  阅读(2143)  评论(0编辑  收藏  举报