退出当前调用堆栈Javascript

时间:2012-11-29 23:12:43

标签: javascript parse-platform

我想在javascript中退出当前的调用堆栈,以免爆炸调用堆栈大小,但我无法访问setTimeout()调用,即:

我的环境中不存在函数setTimeout:)

当我达到调用堆栈大小限制时,我仍然需要退出当前的调用堆栈。

环境是“parse.com”和CloudCode模块,如果有人知道后面运行的是什么,那么这也有帮助!

有什么猜测吗?

PS:这不是因为你唯一知道的是网页浏览器环境和DOM节点操作,甚至更糟糕的是你需要的Javascript问题,这个问题非常贴切。并非每个功能都在各地实施。 PS2:没有附加源代码,因为它更像是一个理论问题,而不是一个应用的问题!

2 个答案:

答案 0 :(得分:3)

Javascript支持抛出异常对象(可以是任何真正的东西),它可以根据需要退出调用堆栈。此MDN页面可能有一些用处:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/try...catch

答案 1 :(得分:0)

基于JayC的答案,您可以保留一个要调用的函数队列,并在循环中运行它们。您将在循环中捕获“退出callstack”异常并运行下一个函数。

nextTick函数会将其参数附加到队列中。

var queue = [];

function nextTick(f) {
    queue.push(f);
}

while (queue.length > 0) {
    try {
        var fun = queue.shift();
        fun();
    }
    catch (ex) {
        if (ex !== 'exit callstack') {
            // Handle "real" exceptions here
        }
    }
}

我没有测试过代码,但这个想法应该可行。当然,有一点需要注意,你不能在异步函数中使用异常处理(除非你检查并重新抛出“exit callstack”异常)。