私は約束が初めてです。一部のマシンに ping を実行して、それらがアクティブかどうかを確認しようとしています。ネイティブ NodeJS の約束を使用しています。私のping機能:
function ping(addr) {
return new Promise(function(resolve, reject) {
var args = ['-n', '1', '-w', '5000'];
args.push(addr);
var ls = cp.spawn('ping.exe', args);
ls.on('error', function (e) {
reject(Error('There was an error while executing the ping'));
});
ls.on('exit', function (code) {
if(code === 0) {
resolve({host: addr});
}
else {
reject(Error(addr + " is down!"));
}
});
});
}
これで、JSON から読み取った配列内のマシンの詳細が得られました。
gulp.task('pingNodes', ['readConfigJSON'], function () {
var batches = ConfigJSON.NodeDetails.Batch1.concat(ConfigJSON.NodeDetails.Batch2);
var pingPromises = batches.map(function (host) {
return ping(host.Name)
.then(function (res) {
console.log(res.host + " is up!");
}).catch(function (err) {
console.log(err);
});
});
return Promise.all(pingPromises).then(function(){console.log("All nodes are up!")});
});
一部のノードがダウンしていても拒否されなくなりました。
[16:58:46] Starting 'init'...
Starting Deployment
[16:58:46] Finished 'init' after 135 µs
[16:58:46] Starting 'readConfigJSON'...
[16:58:46] Finished 'readConfigJSON' after 204 µs
[16:58:46] Starting 'pingNodes'...
machine1 is up!
machine2 is up!
machine3 is up!
[Error: machine4 is down!]
All nodes are up!
[16:58:49] Finished 'pingNodes' after 2.54 s