Вложенный «Return» для выхода из родительской функции?

0

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

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

Может ли часть ниже...

  if (something) {  
    return;
  }

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

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

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

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

Теги:

2 ответа

4
Лучший ответ

Если exitOnCondition возвращает boolean и вызывает его в выражении 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
    Моя цель состоит в том, чтобы избежать "возвращения" туда, кажется, основываясь на обоих ваших ответах, что то, что я пытаюсь сделать, напрямую невозможно. Это правильно? Ты за ответ.
  • 0
    @ VSO: Вы могли бы throw , но это нужно будет где-то поймать. Единственный другой способ избежать return в основную функцию - это реструктурировать ваш код так, чтобы остальные выполнялись, только если другая функция возвращает true. if ($scope.passedCondition()) { doSomething() }
Показать ещё 3 комментария
1

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню