2017-02-02 9 views
0

少しの背景。シンプルな変数チェックはfalseを返す、真でなければならない

私はUTF8エンコードされた文字列にこれを有効にする機能string_decoderノード使用<Buffer 00 00 00>の形で来る私のサーバーからのメッセージ受信しています:

var StringDecoder = require('string_decoder').StringDecoder; 
var decoder = new StringDecoder('utf8'); 

global.message = null; 

client.on('data', function(chunk) { 
    console.log(`New Message ${decoder.write(chunk)}`); 
    message = decoder.write(chunk); 
}) 

実行している、これはNew Message OKをログアウトします別の関数で

正しいグローバル変数がOKになるまで、私は、しかし、私はいくつかの問題に実行しています、ループしています:

console.log(`Global vari ${message}`); 
if(message != "OK"){ 
    setTimeout(check, 1000); 
} else { 
    return cb(true); 
} 

上記のログアウトはGlobal vari OKですが、if文が失敗します。私はメッセージの型チェックをして、期待どおりの文字列を出力します。

私はここで何が起こっているのか困っていますが、私の人生のためにそれを理解することはできません。

+0

'.trim()'を試したことがありますか? '' OK '!= "OK" ' – Satpal

+0

コンソールステートメントは扱いにくく、コードの順に出力されないことがあります。 'else'ステートメントにログインしてみてください。 – chazsolo

+0

多分、すべてが.tostring()。toupper()。trim()にマッチするようにこれを試してください。 – krisph

答えて

0

BOM文字やその他の不可視データがOKではないことは確かですか?

あなたは次のように、文字以外のすべてを削除してみてくださいすることができます

let sanitized = message.replace(/\W/g, ''); 
console.log(`Global vari ${sanitized}`); 
if(sanitized != "OK"){ 
    setTimeout(check, 1000); 
} else { 
    return cb(true); 
} 

、それが今で印刷しますかを参照してください。

あなたはBOM文字とそれらが引き起こす問題についてこれらの答えを見ることができます:

1

は、余分なスペースがあることを確認するcomparaison前にトリミングしてください:

if(sanitized.trim() != "OK"){ 
    setTimeout(check, 1000); 
} else { 
    return cb(true); 
} 

希望すると便利です。

関連する問題