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
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM