【发布时间】:2022-06-11 01:21:57
【问题描述】:
我是 javascript 和 node.js 的初学者,如果这个问题被认为太简单,请原谅我。
我想知道,如果我有一个返回 Promise 的函数,并且在它的 resolve() 中它以某种递归方式再次调用相同的函数,如果它没有得到解决,这会导致堆栈溢出吗?
你可以想象它如下:
var someVariable = await myFunction(someInput)
async function myFunction(myInputValue) {
return new Promise(function(resolve, reject) {
// do some computation
if (someCondition) {
resolve(true)
return
} else {
resolve(myFunction(myInputValue))
return
}
})
}
我之所以问这个问题,是因为我注意到返回指令被执行了,这应该(在我看来)释放函数的上下文堆栈并避免出现堆栈溢出等问题。我是否遗漏了一些东西,然后我冒着问题的风险,或者我是对的,这可以被认为是非常安全的做法?
【问题讨论】:
-
为什么是
myFunctionasync?它永远不会awaits ... 所以async是多余的 -
测试是否会出现堆栈溢出...只需将
if (someCondition) {更改为if (false) {- 然后你会看到如果从未遇到someCondition会发生什么 - 测试这样的事情如果只有一个人真正尝试,就可以如此简单 -
@Bravo 我放了
async,因为在我的真实代码中它需要await,所以你也可以不在这里考虑它。顺便说一句,我试图以这种方式执行它并没有遇到任何麻烦,但我要求它确定。正如我所说,我是 node.js 的新手,所以如果有人肯定知道它,比我有更好的知识,我会觉得更安全。 -
这就是实际代码与最小代码的问题......有时最小代码太少而无法提出合理的建议
-
@Bravo 是的,这是肯定的。但问题不在于此,因此在这种特殊情况下,当实际问题是关于 node.js 的函数堆栈上下文管理时,将我的整个代码放在上面是没有用的。
标签: javascript node.js recursion promise stack-overflow