写了个轮询检查的工具函数,考虑到递归爆栈的可能,测试了一下。
预料中会爆栈,结果居然能正常运行,惊了
代码如下:
function pollingCheck(fn, delay) {
return fn().catch(() => delay().then(() => pollingCheck(fn, delay)))
}
let count = 0
pollingCheck(
() => count++ > 200000 ? Promise.resolve() : Promise.reject(),
() => Promise.resolve() //TODO
).then(() => console.log('finish'))
根据 google 到的最大栈数,最多也就 5 万,下面这段递归轻轻松松就爆栈了
function main(n) {
if (n === 0) {
return 'finish'
} else {
return main(n - 1)
}
}
console.log(main(200000))
所以,为什么上面的 Promsie 递归不会爆栈?