2014-02-15 82 views
1

我使用這個代碼:回調處理程序不concating串

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

當我在我的頻道類型的網絡,其結果是:

[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殭屍狀態。最終結果應該是...網絡:在線/離線

result += JSON.stringify(this).slice(1, -1); 

應concat結果變量,然後說出它到我的頻道。但出於某種原因,它不會串聯字符串。

謝謝!發生

+0

歡迎來到SO。請在你的帖子中提出一個明確的問題。很難說出你需要什麼幫助。 – simbabque

+0

@simbabque我編輯了這篇文章。 – user3125559

+0

將其簡化爲http://jsfiddle.net/simbabque/P4U3M/告訴我問題不在於你的'result + ='行。相反,它必須使用'on()'處理程序。他們似乎沒有工作。我不熟悉節點,所以我不能再幫忙了。嘗試添加一個默認處理程序或查看'createConnection'方法的文檔。 – simbabque

回答

2

的問題,因爲checkPortTCP回調執行不是現在,而是在一些延遲,所以它發生在你的榜樣bot.say(channel, result);執行result += ...

嘗試粘貼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方法

+0

這是工作,但我的最終目標應該是一個!狀態,響應多個服務狀態,例如。 NP:在線,DP:離線,Web:在線,Auth:離線但是,這是正確的答案。 – user3125559

+0

@ user3125559編輯我的帖子,試圖回答你的問題。 – Curious

+0

謝謝,它的工作! – user3125559