2012-09-03 180 views
3

我只是試圖連接一個包含域名解析結果的域的數組。Node.js DNS響應延遲

這是我的代碼:

 var ipList = []; 
     for(var j=0; j < addressList.length; j++) { 
      dns.resolve(addressList[j], function(error, ipRange) { 
       if(error !== null) { 
        console.log('The DNS request failed.'); 
       } 
       console.log('--1--'); 
       console.log(ipRange); 
       console.log('--2--'); 
       ipList.concat(ipRange); 
      }); 
     } 

     console.log(ipList); 

我得到的結果是這樣的:

[] 
--1-- 
[ '173.194.35.144', 
    '173.194.35.145', 
    '173.194.35.146', 
    '173.194.35.147', 
    '173.194.35.148' ] 
--2-- 

它看起來像DNS解析concat()後響應到達,喜歡它被推遲。 這意味着ipList是一個空數組。

任何人都可以幫助我嗎? 在此先感謝!

回答

2

,你跟蹤DNS查詢依然突出,這樣,當全套可你能告訴的數量,你可以做這樣的事情:

var ipList = [], count = addressList.length; 
for(var j=0; j < addressList.length; j++) { 
    dns.resolve(addressList[j], function(error, ipRange) { 
     if(error !== null) { 
      console.log('The DNS request failed.'); 
     } else { 
      ipList.push(ipRange); 
     } 
     if (--count === 0) { 
      // All DNS queries are complete. 
      console.log(ipList); 
     } 
    }); 
} 
+0

由於某種原因仍然不工作::S –

+0

你的'ipList.concat'調用應該是'ipList.push'。我的帖子。 – JohnnyHK

+0

哦,是啊完全錯過了。現在一切正常。感謝您的快速回答! –

4

解決方案是異步的,所以當你做最後的打印時,它不會完成。使用同步DNS(無法立即爲node.js找到),或者正確安排回調。

+0

嗚嗚該死的,我認爲這會是這樣的這個。可惜我不知道如何解決它... –

+0

@AwakeZoldiek,你可以嘗試遞歸(傳入一個調用'console.log(ipList)的回調函數;'如果addressList永遠不會很長 –

+0

我真的沒有明白你的意思,你能舉一個例子嗎? –