一点背景。
我收到来自我的服务器的消息,其形式为<Buffer 00 00 00>
我使用Node 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 :(得分:1)
尝试在比较之前修剪,以确保没有多余空格:
if(sanitized.trim() != "OK"){
setTimeout(check, 1000);
} else {
return cb(true);
}
希望这有帮助。
答案 1 :(得分: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字符及其导致的问题的以下答案: