【问题标题】:Terminate Javascript without error / exception在没有错误/异常的情况下终止 Javascript
【发布时间】:2016-01-12 04:11:34
【问题描述】:

我需要从一个函数中终止 javascript,这样它就不会执行脚本调用的下一个代码块和其他函数,这些函数跟在当前函数之后。

我在 SO 中发现了这个现有问题:How to terminate the script in Javascript,其中给出了触发错误/异常的解决方案,该错误/异常将立即终止脚本。

但我的情况不同,因为我终止脚本的目的是防止在当前函数不停止执行脚本的情况下来自下一个函数的错误。所以,触发另一个错误来防止错误并不能解决我的目的!

那么,有没有其他方法可以终止 javascript 而不是抛出错误/异常?

请在标记为重复之前正确阅读我的问题,我已经解释了为什么它不能解决我提到的问题的问题!

【问题讨论】:

  • 您的要求在浏览器环境下不合理。你需要重新安排你的逻辑,这样你就不能调用会出错的函数。或者设置一个他们检查的标志,如果它被设置或其他东西提前返回。
  • 我读完了,Tareq。您没有阅读这里的建议和那里的所有答案吗?在main 函数中创建一个控制结构并从您的函数返回到它。然后,您有权决定是继续操作还是允许脚本正常终止。
  • 使用 jQuery 是一种选择吗?
  • @guest271314,当然,如果可能的话没有错误。

标签: javascript exit


【解决方案1】:

由于您在函数内部,因此只需 return

进一步阅读您的问题,即它不执行“脚本调用的其他函数”,您应该返回一个布尔值。例如,如果您不想调用其余语句,则返回 false,然后将其余语句包装在 if 中:

function Foo() {
    if (weAreInLotsOfTrouble) {
        return false;
    }

    return true;
}

DoSomething();
DoSomethingElse();

if (Foo()) {
    DoSomethingDangerous();
}

【讨论】:

  • 那只会终止函数,不会终止脚本,我需要停止当前函数后面的函数才能停止执行!
  • 所以从脚本中返回一个真/假,让你的主函数根据返回值决定是否继续。
  • @DavidHoelzer,是的,这是一个可能的解决方案。我们也可以在 PHP 中这样做,但我们仍然有一个名为 exit() 的函数,它减少了我们的任务。我只是想知道,如果有什么方法可以在Javascript中没有错误地杀死脚本,如果没有,我们无论如何都可以找到其他解决方案。
【解决方案2】:

尝试使用 jQuery.Callbacks() 和参数 "stopOnFalse"jQuery.when() , jQuery .then()

var callbacks = $.Callbacks("stopOnFalse");

function a(msg) {
  var msg = msg || "a";
  console.log(msg);
  return msg
}
// stop callbacks here
function b() {
  var msg = false;
  console.log(msg)
  return msg
}
// `c` should not be called
function c() {
  var msg = new Error("def");
  console.log(msg)
  return msg
}

callbacks.add(a,b,c);

$.when(callbacks.fire())
.then(function(cb) {
  // `c` : `Error`
  if (cb.has(c)) {
    console.log("callbacks has `c`"
                , cb.has(c));
    // remove `c`
    cb.remove(c);
    console.log(cb.has(c));
    // empty `callbacks`
    cb.empty();
    // do other stuff
    cb.add(a);
    cb.fire("complete")
    
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>

【讨论】:

  • OMG,这看起来比其他答案提供的解决方案更复杂。无论如何感谢您的帮助,但我只是在寻找停止脚本的简单解决方案,而不是回调。
  • 使用@lc发布的解决方案
  • 是的,这就是我所说的。
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 2021-10-10
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2021-07-02
  • 2014-10-14
相关资源
最近更新 更多