基本上,我正在制作一个小脚本,以根据某些服务器的主机名检查IP,然后将该IP与基于路由器发出的IP块的列表进行比较。
我遇到的问题显然是异步执行代码,它可能被回答了一千遍,但是我似乎无法全神贯注于如何解决它。我曾尝试将所有内容都包装在Promise中,但最终却破坏了所有内容。这是将我需要的步骤分解为各个功能的最新尝试。
const dns = require('dns');
const Table = require('cli-table');
const hosts = ['Server01', 'Server02', 'Server03'];
let list = [];
table = new Table({
head: ['Host', 'Location']
, colWidths: [20, 30]
});
function process() {
hosts.forEach(host => {
dns.lookup(host, function (err, result) {
ipSplit = result.split(".");
r = ipSplit[0] + '.' + ipSplit[1] + '.' + ipSplit[2];
if (r == '10.23.13') {
list.push([host, 'Lab A112']);
}
else {
list.push([host, 'Unknown']);
}
});
});
};
function build () {
table.push(list);
};
function push () {
console.log(table.toString());
};
process();
build();
push();
我在这里错过了什么难题?
答案 0 :(得分:0)
您将要使用Promise.all:
const result = Promise.all(hosts.map(host => {
return new Promise((resolve, reject) => {
dns.lookup(host, function (err, result) {
if (err) reject(err);
const ipSplit = result.split(".");
const r = ipSplit[0] + '.' + ipSplit[1] + '.' + ipSplit[2];
if (r === '10.23.13') {
resolve([host, 'Lab A112']);
} else {
resolve([host, 'Unknown']);
}
});
}
}));
答案 1 :(得分:0)
您可以使用 async / await 来订购函数调用,您将获得所需的订单。
java.lang.String