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。

谢谢!

问题发生是因为checkPortTCPcallback执行不正确,但在一些延迟,所以它发生在你的例子bot.say(channel, result); result += ... 之前执行

尝试粘贴bot.say(channel, result);checkPortTCPcallback里面。 所以这将是:

 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方法中