callback处理程序不是串联的string
我正在使用这个代码:
if (msg[0] == '!web') { var result = '\x032[\x02status\x02]\x03 Web: '; checkPortTCP('127.0.0.1', 80, function() { result += JSON.stringify(this).slice(1, -1); }); bot.say(channel, result); }
当我在我的频道中键入!web时,结果是:
[status] Web:
没有实际的输出。
checkPortTCP:
function checkPortTCP(host, port, cb) { net.createConnection(port, host).on("connect", function(e) { cb.call("online"); }).on("error", function(e) { cb.call("offline"); }); }
我正在为IRC做一个状态机器人。 最终结果应该是… Web:在线/离线
result += JSON.stringify(this).slice(1, -1);
应该concat结果variables,然后说出它到我的频道。 但由于某种原因,它不会串联string。
谢谢!
问题发生是因为checkPortTCP
callback执行不正确,但在一些延迟,所以它发生在你的例子bot.say(channel, result);
在 result += ...
之前执行
尝试粘贴bot.say(channel, result);
在checkPortTCP
callback里面。 所以这将是:
var result = '\x032[\x02status\x02]\x03 Web: '; checkPortTCP('127.0.0.1', 80, function() { result += JSON.stringify(this).slice(1, -1); bot.say(channel, result); });
更新
如果你想检查多个服务,你可以写下如下内容:
checkPortTCP('127.0.0.1', 80, function() { result += JSON.stringify(this).slice(1, -1); checkPortTCP('127.0.0.1', 81, function() { result += JSON.stringify(this).slice(1, -1); bot.say(channel, result); }); });
有两个服务检查,但你可以有更多。 你只需要将一个支票嵌套到另一个支票中,并在最后一个回叫调用bot.say
方法中