写了个轮询检查的工具函数,考虑到递归爆栈的可能,测试了一下。
预料中会爆栈,结果居然能正常运行,惊了
代码如下:
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 递归不会爆栈?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.