以下函数旨在通过反复创建微任务来阻止宏任务。但是为什么会导致堆栈溢出?我以为
await
会将递归调用放置在微任务中,因此清空堆栈(显然我错了)。const waitUsingMicroTasks = async (durationMs, start = performance.now()) => {
const wait = async () => {
let elapsed = (performance.now() - start)
if(elapsed < durationMs) await wait()
}
await wait()
}
waitUsingMicroTasks(1000)
然而,这个我认为几乎等价的代码不会导致堆栈溢出:
const waitUsingMicroTasks = async (durationMs, start = performance.now()) => {
const wait = async () => {
let elapsed = (performance.now() - start)
if(elapsed < durationMs) Promise.resolve().then(wait)
}
await wait()
}
waitUsingMicroTasks(1000)