题目描述

  • 累加 1 - n,为了不阻塞主线程,每 15ms 停一次。
  • 将后续任务放入宏任务队列中,最终通过 Promise 返回累加结果

思路&js代码

1、递归

function calc(n) {
  let sum = 0
  let currentN = 0
 
  return new Promise(resolve => {
    const add = () => {
      const startTime = Date.now()
      while (true) {
        // 运行到末尾
        if (currentN > n) {
          resolve(sum)
          return
        }
 
        // 单次执行时间到达15ms
        const currentTime = Date.now()
        if (currentTime - startTime > 15) {
          console.log("执行下一批次,当前数据:", currentN - 1, sum)
          setTimeout(add, 0)
          return
        }
 
        sum += currentN
        currentN++
      }
    }
    add()
  })
}
 
const run = async n => {
  const res = await calc2(n)
  console.log(res)
}
 
run(1000000)