回调处理程序不会连接字符串

时间:2014-02-15 13:20:37

标签: javascript node.js irc

我正在使用此代码:

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

应该连接结果变量,然后将其写入我的频道。但由于某种原因,它不会连接字符串。

谢谢!

1 个答案:

答案 0 :(得分:2)

问题出现是因为checkPortTCP回调现在不执行,但是在一些延迟中,所以在您的示例bot.say(channel, result);执行之前 result += ... < / p>

尝试在bot.say(channel, result);回调中粘贴checkPortTCP。所以它将是:

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