Node.js DNS响应延迟

时间:2012-09-03 00:15:42

标签: node.js asynchronous dns callback

我只是想连接一个包含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 个答案:

答案 0 :(得分:4)

resolve是异步的,所以当你做最后的打印时它没有完成。使用同步DNS(无法立即为node.js找到此信息),或正确安排回调。

答案 1 :(得分: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);
        }
    });
}
相关问题