题目描述
- 累加 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)