我在想,当异步函数递归调用自己无限时会发生什么。我的想法是,它不会导致堆栈溢出。但是我无法确切指出为什么会这样。
const foo = async () => {
const txt = await Promise.resolve("foo");
console.log(txt);
foo();
}
foo();
Run Code Online (Sandbox Code Playgroud)
上面的代码无限打印“ foo”,而不会溢出堆栈。
我的想法是,代码在概念上与以下代码类似,它不会导致堆栈溢出,因为递归调用foo()位于回调内部,而对的原始调用foo()将在此之前返回。
const bar = () => {
console.log("foo");
foo();
}
const foo = () => {
setImmediate(bar);
}
foo();
Run Code Online (Sandbox Code Playgroud)
我正在寻找有关异步功能情况下的确切答案。