我是Java的新手。我从Angular的一个非常基础的项目开始,即表单验证。就我而言,我只能在自己内部调用自定义方法validationTest()一次。如果我不设置任何中断条件,那么将有太多的递归。我必须停止这个。我尝试了许多其他解决方案:


Break Statement in TypeScript
TypeScript - Loops


我非常仔细地关注了他们,但是我得到了:


  模块解析失败:语法中断(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背景。请纠正我。

最佳答案

要停止执行功能,请使用returnbreak仅在forwhile循环的上下文中才有意义。

但是另一个问题是您的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);
}

关于javascript - 如何在Typescript中使用break语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60518895/

10-16 22:05