Как использовать оператор break в Typescript - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в Javascript. Я начал с очень простого c проекта в Angular, то есть проверки формы. В моем случае я должен вызвать свой пользовательский метод validationTest() внутри себя только один раз. Если я не поставлю условие прерывания, тогда будет слишком много рекурсий. Я должен остановить это. Я пробовал много других решений:

  1. Оператор разрыва в TypeScript
  2. TypeScript - циклы

I очень внимательно следил за ними, но я получаю следующее:

Ошибка синтаксического анализа модуля: Unsyntacti c break (84:12)

Вот мой код:

validationTest() {
    let count =0;
    this.isAnyRangeInvalid = false;
    this.monthpicker.forEach(picker => {
        if (picker.isValidRange === false) {
            this.isAnyRangeInvalid = true;
        }
    });
    count ++;
    if(count===1) {
        break;
    }
    this.validationTest();
}

Даже редактор VScode также показывает красную зигзагообразную линию под токеном break. Я иду из Java и CPP фона. Пожалуйста, поправьте меня.

1 Ответ

3 голосов
/ 04 марта 2020

Чтобы остановить выполнение функции, используйте return. break имеет смысл только в контексте for или while l oop.

Но другая проблема заключается в том, что у вашего validationTest нет постоянного вид переменной count - она ​​полностью локальная, поэтому тест все равно не будет работать. Попробуйте вместо этого передать параметр, который укажет, является ли текущий вызов рекурсивным или нет:

validationTest(lastTry = false) {
    this.isAnyRangeInvalid = false;
    this.monthpicker.forEach(picker => {
        if (picker.isValidRange === false) {
            this.isAnyRangeInvalid = true;
        }
    });
    if (!lastTry) this.validationTest(true);
}

Убедитесь, что начальный вызов validationTest не передает параметр или передает false.

Для более общего решения, ограничивающего себя N рекурсивными попытками, вместо этого можно указать число, например:

validationTest(triesLeft = 3) {
    this.isAnyRangeInvalid = false;
    this.monthpicker.forEach(picker => {
        if (picker.isValidRange === false) {
            this.isAnyRangeInvalid = true;
        }
    });
    if (triesLeft !== 0) this.validationTest(triesLeft - 1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...