Javascript 当循环中的所有回调都完成时调用函数

Javascript 当循环中的所有回调都完成时调用函数,javascript,node.js,stream,fs,line-by-line,Javascript,Node.js,Stream,Fs,Line By Line,我有一个简单的脚本,它使用ReadLineAPI处理一个大的主机名文件,它逐行读取,对于每个主机名,我调用一个异步dns函数来获取与主机名相关的ip地址 这是我的密码: const readline = require('readline') , fs = require('fs') , dns = require('dns'); var res = []; const rl = readline.createInterface({ input: fs.createR

我有一个简单的脚本,它使用ReadLineAPI处理一个大的主机名文件,它逐行读取,对于每个主机名,我调用一个异步dns函数来获取与主机名相关的ip地址

这是我的密码:

const readline = require('readline')
    , fs = require('fs')
    , dns = require('dns');

var res = [];

const rl = readline.createInterface({
    input: fs.createReadStream('hostnames.csv')
});

rl.on('line', function (line) {
    var parts = line.split(',');
    dns.resolve4(parts[1], function (error, ips) {
        if (error) return console.log('dns__error: ' + error);
        res.push({ id:parts[0], hostname:parts[1], ips:ips });
    });

});

rl.on('close', function () {
    console.log(res.length);
    fs.writeFile('hostnames.json', JSON.stringify(res), function (error) {
        if (error) console.log('fs__writeFile__error: ' + error);
    });
});
问题是当发出关闭事件时,res数组不包含所有结果,如何在执行所有dns请求后运行回调

谢谢