2017-07-06 69 views
0
let errors = false; 

// Check for errors in any single payload 
for (let result of results) if (result.status === "error") { 
    errors = true; 
    errorMessage = result.message; 
    console.log(errors) // logs out "true" 
} else { 
    errors = false; 
} 

console.log(errors) // logs out "false" 

// If error exists, alert user 
if (errors === true) { 
    console.log(errors); 
    alert('Error Requesting Monitor Data!\n'+errorMessage) 
} else { 
    console.log(errors); // logs out "false" 
} 

來自Python/Scala的JavaScript新手。在上面的代碼中,for循環範圍之外的錯誤永遠不會修改爲true。我不瞭解變量的範圍和價值的修改?Javascript變量不變

+0

只有當result.status ===「error」爲「true」時,它纔會被設置爲「true」。是這樣嗎? –

+0

@FelixKling是的,我在控制檯中看到以下內容:x3爲true,然後從第二個條件爲false。 –

+0

適合我:https://jsfiddle.net/8hhytjbf/。如果你的實際代碼是這樣的(並且定義了所有變量),那麼它將按預期工作。它當然不是一個範圍問題。 –

回答

3

你的循環很大程度上是無足輕重的。

既然你設置在環路的else部分errors = false,你基本上是檢查,看看是否最後件事,你的測試是一個錯誤。

您將通過循環並將結果每次都翻轉至truefalse。它以描述最後一件事的價值結束。

如果您的目標是測試「一個或多個」收集是否爲錯誤,那麼您需要刪除else分支

這樣,它開始爲false,如果有錯誤但可能翻轉到true,但不會翻轉。

+0

啊屎,菜鳥的錯誤。你是對的。發生的事情是,當成功的有效負載與來自端點的有效負載混合在一起時,我將'errors'的值重新分配爲'false'。所以應該刪除第一個塊中的「else」條件。 –