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--

concat()遅延したように、の後に DNS 解決の応答が到着したようです。つまり、ipList は空の配列です。

誰でもこれについて私を助けることができますか? 前もって感謝します !

4

2 に答える 2

4

解決は非同期であるため、最終的な印刷を行うときに行われません。同期 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 に答える