我有一个异步函数,要连续多次调用。问题是“多个”可以是几十万或数百万…
显而易见的方法是从回调中调用相同的函数,如下所示:
function foo() { asyncBar(foo); }
当然,涉及一些逻辑来停止递归。问题是堆栈是否充满了调用,并可能在某些时候导致堆栈溢出?
问题是堆栈是否充满了调用,并可能在某些时候导致堆栈溢出?
否。 如果asyncBar()调用回调是异步传递的,则不会堆积堆栈。
asyncBar()
在您的代码中:
这是逐步发生的事情:
foo()
asyncBar(foo)
asyncBar
foo
没有堆栈堆积。关键是异步回调在当前堆栈完成之后的某个时候被调用,然后展开并返回系统。