我有看起来像这样的代码:

function myEventHandler() {
    inMyEventHandler = true;
    longRunningStuff();
    inMyEventHandler = false;
}


这很有效,除了在iPad上Safari Mobile偶尔会因错误使Java脚本超时而外。因此longRunningStuff()死亡并且inMyEventHandler从未被清除。这非常糟糕,因为如果我们不在此函数范围内,否则inMyEventHander绝对无法设置,否则会发生Bad Things(tm)。

理想情况下,我可以从longRunningStuff内部深入检查myEventHandler是否在调用堆栈中位于其上方,这会自行解决。我找不到办法...提示?

最佳答案

(最简单)在arguments.callee.caller中时,您可以检查longRunningStuff

function longRunningStuff() {
  if (arguments.callee.caller === myEventHandler) {
    // take care
  }
}

另一个变体:

function myEventHandler() {
  // code
}
myEventHandler.disable_in_longRunningStuff = true;
function longRunningStuff() {
  if (arguments.callee.caller.disable_in_longRunningStuff) {
    // take care
  }
}

最长的方法-从https://github.com/eriwen/javascript-stacktrace检索调用堆栈

关于javascript - Safari Mobile(iPad)上的Javascript堆栈检查,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5358983/

10-13 00:24