2012-09-03 132 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

我真的没有明白你的意思,你能举一个例子吗? –