2017-02-02 16 views
0

有點背景。簡單變量檢查返回false,應該爲真

我收到了來自我的服務器進來的<Buffer 00 00 00>形式我用string_decoder功能把它變成一個UTF8編碼字符串的節點的消息:

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

希望這會有所幫助。

相關問題