从jquery中的另一个函数停止函数

时间:2014-12-26 10:57:44

标签: javascript jquery

我们说我有以下功能

var isallow = false;
function checkToAllow(){
 if(isallow == false)
  // stop execution of calling method( parent method)
}

function showMEVal(){
checkToAllow();
console.log("I am here because I am allowed");
}

所以基本上,showMEVal()方法将首先检查是否允许进一步执行,如果允许则继续执行,否则它将退出。

这是一个函数的通用功能,需要首先检查它是否应该继续。

我不想明确使用checkToAllow()方法返回的值,比如

 function showMEVal(){
   if(checkToAllow() == true)
    console.log("I am here because I am allowed");
    }

我正在考虑使用 event.stopImmediatePropagation(); ,但它似乎不起作用。

请告知

由于

1 个答案:

答案 0 :(得分:2)

处理此问题的常用方法是在子函数中抛出异常。您可以在w3schools阅读JavaScript中的异常处理的简要说明,在这里:http://www.w3schools.com/js/js_errors.asp

所以对于你的例子,你有:

var isallow = false;
function checkToAllow() {
    if(isallow == false)
        throw CustomAbort(); // Can be anything: object or basic data type
}

function showMEVal(){
    try{
        checkToAllow();
    }
    catch (err) {
        return;
    }
    console.log("I am here because I am allowed");
}

这有用的原因是您只需要在JavaScript的最高级别拥有try... catch...构造,并且只需要一次。然后,在您的处理过程中,您可以简单地拥有:

function deepFunction() {
    checkToAllow();
    console.log("I am here because I am allowed.");
    console.log("I'm not sure what happens if I'm not allowed, because it's taken care of by checkToAllow(), and by the top level error handling!")
}

你可能只是throw来自checkToAllow的任何内容,并且没有其他任何东西正在捕获该错误,它将作为JavaScript错误一直传播并停止其余的处理...但是&#39 ; s显然不是最佳实践,因为没有人想在他们的页面中出现JavaScript错误!