Javascript 为什么我的函数不返回错误字符串?

Javascript 为什么我的函数不返回错误字符串?,javascript,typescript,knockout.js,Javascript,Typescript,Knockout.js,我有下面的函数。它做它需要做的事情,只是它不返回我想要的错误字符串 它总是返回“” 我已经设置了断点,并看到它在每个错误案例中逐步出现,但它没有返回到那里。它在函数的末尾返回 我迷路了,我肯定我犯了一个非常愚蠢的错误,但我不明白 请帮我留几根头发:) 正如Alex Bykov所指出的,您的forEach函数不会导致返回 你的问题是为什么不呢 函数的返回值未定义 返回 值未定义 这意味着您所能做的任何事情都不会生成您可以使用的返回值。此外,根据MDN,除了抛出异常之外,没有其他方法可以停止或中断循

我有下面的函数。它做它需要做的事情,只是它不返回我想要的错误字符串

它总是返回“”

我已经设置了断点,并看到它在每个错误案例中逐步出现,但它没有返回到那里。它在函数的末尾返回

我迷路了,我肯定我犯了一个非常愚蠢的错误,但我不明白

请帮我留几根头发:)


正如Alex Bykov所指出的,您的
forEach
函数不会导致返回

你的问题是为什么不呢

函数的返回值未定义

返回

值未定义

这意味着您所能做的任何事情都不会生成您可以使用的返回值。此外,根据MDN,除了抛出异常之外,没有其他方法可以停止或中断循环

除了通过以下方法之外,没有其他方法可以停止或中断forEach()循环 正在引发异常。如果需要这种行为,可以使用forEach()方法 如果工具不正确,请使用普通循环。如果您正在测试 数组元素,并且需要一个布尔返回值 可以使用every()或some()代替。如果可用,请选择新方法 find()或findIndex()可用于在为true时提前终止 谓词也是

这意味着您需要在
forEach
循环中抛出异常,然后捕获异常并返回如下字符串 (除非您使用普通for循环,否则您可以随心所欲)


您的函数得到了唯一的返回值=
。forEach
方法不会为您的
validatePanel
函数返回值。另外,还不清楚这是什么。查询isOk会让我变傻,但为什么不呢?更好的是,我如何让它回归呢?这就像一个魅力,但似乎难以置信的黑客。。。我想我可以选择for循环。@84我自己会建议使用for循环,我理解为什么是这样。但有时这就是饼干的制作方法crumblies@Puzzle84如果要中断循环而不是执行for循环,可以使用array.some函数而不是forEach。
    public validatePanel = () => {
        this.Queries().forEach(function(q, i) {

            if(q.from() == "" || q.from() == null || q.from() == undefined) {
                return "Please select a database";
            }

            if(q.select().length > 0) {
                q.select().forEach(function(s, j) {
                    if(s.selectoption() == "" || s.selectoption() == null || s.selectoption() == undefined){
                        return "Please select a stat to show";
                    }
                });
            }

            if(q.where().length > 0) {
                q.where().forEach(function(w, j) {
                    if(w.whereoption() == "" || w.whereoption() == null || w.whereoption() == undefined){
                        return "Please select a filter to filter on";
                    }

                    if(w.wherevalue() == "" || w.wherevalue() == null || w.wherevalue() == undefined) {
                        return "Please select a value for your filter";
                    }
                });
            }
        });

        return "";
    }
try {
       this.Queries().forEach(function(q, i) {

            if(q.from() == "" || q.from() == null || q.from() == undefined) {
                throw "Please select a database";
            }

            if(q.select().length > 0) {
                q.select().forEach(function(s, j) {
                    if(s.selectoption() == "" || s.selectoption() == null || s.selectoption() == undefined){
                        throw "Please select a stat to show";
                    }
                });
            }

            if(q.where().length > 0) {
                q.where().forEach(function(w, j) {
                    if(w.whereoption() == "" || w.whereoption() == null || w.whereoption() == undefined){
                        throw "Please select a filter to filter on";
                    }

                    if(w.wherevalue() == "" || w.wherevalue() == null || w.wherevalue() == undefined) {
                        throw "Please select a value for your filter";
                    }
                });
            }
        });
}
catch(err) {
console.log(error);
}