我的功能如下。除了不返回我想要的错误字符串外,它还能满足需要。
它总是返回“”。
我已经设置断点并看到它进入每个错误情况,但它不会返回那里。它在函数结束时返回。
我迷路了,我确定我犯的是一个非常愚蠢的错误,但我不明白......
请给我留下我喜欢的几根头发:)
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 "";
}
答案 0 :(得分:2)
正如Alex Bykov指出的那样,你的forEach
函数不会导致返回。
根据MDN
,您的问题原因为何函数的返回值未定义
返回
值未定义。
这意味着您无法做任何事情都会生成您可以使用的返回值。此外,根据MDN,除了抛出异常之外,无法停止或中断循环。
除了by之外,没有办法停止或中断forEach()循环 抛出一个例外。如果需要这样的行为,请使用forEach()方法 是错误的工具,而是使用普通循环。如果你正在测试 你需要一个谓词的数组元素并需要一个布尔返回值 可以使用every()或some()代替。如果可用,新方法 find()或findIndex()可以在true时用于提前终止 也是谓词。
这意味着您需要在forEach
循环中抛出异常,然后捕获异常并返回如下所示的字符串
(除非你使用正常的for循环然后你可以做任何你喜欢的事情)
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);
}