3

我只是想连接一个包含作为 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 是一个空数组。

谁可以帮我这个事 ?提前致谢 !

4

2 回答 2

4

resolve 是异步的,因此在您进行最终打印时并未完成。使用同步 DNS(无法立即为 node.js 找到此内容),或正确安排回调。

于 2012-09-03T00:18:26.910 回答
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);
        }
    });
}
于 2012-09-03T00:54:52.040 回答