2017-07-06 19 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" 
} 

JavaScriptが新しく、Python/Scalaから来ました。上記のコードでは、forループスコープ外のエラーは決してtrueに変更されます。変数の範囲と値の変更について、私は何を理解していませんか?JavaScriptの変数は変更されていません。

+0

'result.status ===" error "'が 'true'の場合にのみ' true'に設定されます。それは事実ですか? –

+0

@FelixKlingはい、コンソールで次のように表示されます:x3 true、2番目の条件からfalseです。 –

+0

私のためにうまく動作:https://jsfiddle.net/8hhytjbf/。実際のコードがこのようなものであれば(そしてすべての変数が定義されていれば)、それは期待どおりに動作します。それは確かに範囲の問題ではないようです。 –

答えて

3

あなたのループはほとんど無意味です。

あなたがループのelse一部にerrors = falseを設定しているので、あなたは基本的にあなたがテスト最後事は誤りであるかどうかをチェックされています。

ループを通過し、結果をtrueまたはfalseにフリップさせます。それは最後のものを記述する値で終わる。

コレクションの「1つ以上」がエラーであるかどうかをテストすることが目的の場合は、を削除する必要があります。

このようにして、falseとして開始し、エラーがある場合は戻ってくることはありませんが、trueになる可能性があります。

+0

ああ、ルーキーミス。あなたが正しい。起こっていたことは、成功したペイロードがエンドポイントからの悪いペイロードと混じったときに、私は 'errors'の値を' false'に戻し直していたことでした。したがって、最初のブロックの "else"条件を削除する必要があります。 –

関連する問題