2016-11-30 112 views
1

我有以下功能。除了它不返回我想要的錯誤字符串外,它做它需要的。爲什麼我的函數不返回錯誤字符串?

它總是返回「」。

我已經把斷點,看到它進入每個錯誤的情況下,但它不會返回那裏。它在函數結束時返回。

我迷路了,我敢肯定,我正在做一個非常愚蠢的錯誤,但我不明白這一點...

保存我的幾根頭髮我已經請:)

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 ""; 
    } 
+2

你函數得到的唯一返回值='「」' '.forEach'方法不會爲你的'validatePanel'函數返回值。 此外它不清楚什麼'this.Queries'是 –

+0

好吧我的顏色是愚蠢的,但爲什麼不呢?更好,但我如何使它返回? – Puzzle84

回答

2

正如Alex Bykov指出的那樣,您的forEach函數不會導致返回。

你爲什麼不,每MDN

函數的返回值是不確定

返回

價值不確定的問題。

這意味着你可以做的任何事情都不會產生你可以使用的返回值。除了拋出異常之外,根據MDN,也無法停止或中斷循環。

除了被 拋出一個異常,沒有辦法停止或破壞forEach()循環。如果您需要這種行爲,forEach()方法 是錯誤的工具,請改用純循環。如果您正在測試謂詞的 數組元素並且需要布爾返回值,則您可以使用every()或some()來代替。如果可用,則新方法find()或findIndex()也可用於提前終止謂詞。

這意味着你需要把你的例外在forEach循環,然後捕獲異常,並返回字符串像下面 (除非你使用一個正常的循環,那麼你可以做任何你請

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); 
} 
+0

這就像一個魅力,但似乎令人難以置信的hackish ...我想我可以去循環。 – Puzzle84

+0

@ Puzzle84我會爲自己建議for循環,我明白爲什麼會這樣。但有時候這就是餅乾崩潰 – gh9

+0

去for循環的方式。謝謝 – Puzzle84

相關問題