2015-09-30 3 views
0

Моя цель - проверить состояние и выйти из текущей функции. ОДНАКО, я бы предпочел сделать это в другой функции, вызванной функцией, которую я хочу выполнить. Простой пример, который не требует отдельной функции и просто проверить состояния в организме:Вложенные «Возврат» для выхода из родительской функции?

$scope.doStuff = function(){ 
    if (something) { 
    return; 
    } 
    doSomething(); 
} 
Может ниже часть

...

if (something) { 
    return; 
    } 

... быть помещен в функцию, которая может быть использована в doStuff(), так?

$scope.doStuff = function(){ 
    $scope.exitOnCondition(); 
    doSomething(); 
} 

$scope.exitOnCondition){ 
     if (something) { 
     return; 
     } 
} 

Очевидно, что в том, как я написал, «возвращение» вернется из функции exitOnCondition, не DoStuff. Как обычно, мне не нужен проверенный код, просто общий пример, все здесь просто для иллюстрации вопроса.

ответ

3

Имейте exitOnCondition, возвращайте булев, и назовите его в инструкции if.

$scope.doStuff = function(){ 
    if ($scope.exitOnCondition()) 
    return; 
    doSomething(); 
} 

$scope.exitOnCondition = function(){ 
     if (something) { 
     return true; 
     } 
} 

Чтобы избежать в основной функцией return, вы могли бы реструктурировать это немного, но if нужно будет оставаться.

$scope.doStuff = function(){ 
    if (!$scope.exitOnCondition()) 
    doSomething(); 
} 

$scope.exitOnCondition = function(){ 
     if (something) { 
     return true; 
     } 
} 

Обратите внимание на отрицание результата !. Это может быть немного чище, если вы измените значение функции exitOnCondition().

$scope.doStuff = function(){ 
    if ($scope.passedCondition()) 
    doSomething(); 
} 

$scope.passedCondition = function(){ 
     if (something) { 
     return false; 
     } 
} 
+0

Моя цель состоит в том, чтобы избежать «возвращения» там, кажется, исходя из обоих ваших ответов, что я пытаюсь сделать прямо. Это верно? Ty для ответа. – VSO

+0

@VSO: Вы можете «бросить», но его нужно поймать где-нибудь. Лишь другим способом избежать «возврата» в основной функции будет реструктурировать ваш код, чтобы остальное выполнялось только в том случае, если другая функция возвращает true. 'if ($ scope.passedCondition()) {doSomething()}' –

+0

Хм, это кажется ужасно запутанным, но определенно полезным, если условие выхода является сложной проверкой. Я пытался сделать однострочное и задавался вопросом, не знаю ли я каких-то 101 вещи. Теперь я понимаю, спасибо за ответ, я приму это, когда сработает таймер с пятью минутами. – VSO

1

Вы могли бы exitOnCondition возвращать значение, которое вы можете проверить в родительской функции.

$scope.exitOnCondition = function() { 
    if (something) { 
    return true; 
    } 
    // ... 
    return false; // Could omit this entirely 
}; 

$scope.doStuff = function() { 
    if ($scope.exitOnCondition()) { 
    return; 
    } 
    doSomething(); 
}; 
Смежные вопросы