我在JavaScript中编写一个非常简单的脚本, 它应该ping一个子网中的每个IP,如果IP响应它将它放在一个数组中,如果没有响应,它将它放在一个不同的数组中。
我的问题是,当我在循环填充数组后尝试调用数组时它是空的,但是如果我在循环期间调用数组它就会填充。
这是我的代码:
var ping = require ('ping');
var targets = [];
var avail = [];
var unAvail = [];
var i = 0;
while (i < 255){
targets.push('100.73.1.'+i);
i++;
}
targets.forEach(function(target){
ping.sys.probe(target, function(isAlive){
if (isAlive){
unAvail.push(target);
console.log(unAvail);
}else{
avail.push(target);
}
});
});
unAvail.forEach(function(ip){
console.log(ip);
});
编辑:它正在使用的ping是npm ping https://www.npmjs.com/package/ping
编辑:修改代码以使用promise运行。
var ping = require ('ping');
var targets = [];
var avail = [];
var unAvail = [];
var i = 0;
while (i < 255){
targets.push('100.73.1.'+i);
i++;
}
targets.forEach(function(target){
ping.promise.probe(target)
.then(function(isAlive){
if (isAlive){
unAvail.push(target);
//console.log(unAvail);
}else{
avail.push(target);
}
});
});
console.log(unAvail)