nodejs回调执行结果
nodejs callback exec result
我是节点的新手,对异步回调有些头疼。
我正在编写一个脚本来 ping 服务器列表,并希望 return 一个数组来表示它们的状态('OK' 如果所有主机都是 'pingable')
hostaddr = [ '10.102.14.20', '10.102.14.21', '10.102.14.22' ];
pingstat = testping(hostaddr, function(err, callback) {
console.log(callback);
});
const exec = require('child_process').exec;
var testping = function(hostaddr,callback) {
var pingstat = [];
for (let i = 0; i < hostaddr.length; i++) {
const child = exec('ping -c 1 ' + hostaddr[i],
(error, stdout, stderr) => {
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
if (error !== null) {
console.log(`exec error: ${error}`);
} else {
pingstat.push("OK");
callback(pingstat);
}
});
}
}
我希望测试函数 return pingstat ['OK,'OK','OK'] 如果所有主机都 ping 成功,但我的代码不起作用,请帮助
我会尝试这样的事情:
const exec = require('child_process').exec;
var testping = function(hostaddr,callback) {
var pingstat = [];
for (let i = 0; i < hostaddr.length; i++) {
const child = exec('ping -c 1 ' + hostaddr[i],
(error, stdout, stderr) => {
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
if (error !== null) {
console.log(`exec error: ${error}`);
pingstat.push("ERROR");
} else {
pingstat.push("OK");
}
if (pingstat.length == hostaddr.length) {
callback (pingstat);
}
});
}
}
var hostaddr = [ '10.102.14.20', '10.102.14.21', '10.102.14.22' ];
var pingResults = null;
var hostaddr = [ '192.168.2.54' ,'192.168.2.541'];
testping(hostaddr, function(results) {
console.log("Ping results: " + results);
// Save results.
pingResults = results;
});
var express = require('express');
var app = express();
app.get('/pingResults', function(req, res, next) {
res.status(200);
res.header("Content-Type", "application/json");
res.end(JSON.stringify({pingResults: pingResults}));
});
app.get('/pingresultslive', function(req, res, next) {
testping(hostaddr, function(results) {
console.log("Ping results: " + results);
res.status(200);
res.header("Content-Type", "application/json");
res.end(JSON.stringify({pingResults: pingResults}));
});
});
var httpPort = 8081;
console.log('Listening on port: ' + httpPort);
app.listen(httpPort);
您还可以通过将错误详细信息附加到 "ERROR" 字符串来在结果数组中包含更多错误信息。
因此,您现在可以保存结果并使用 curl 进行查询:
卷曲 http://localhost:8081/pingresults
或者你可以现场直播
卷曲 http://localhost:8081/pingresultslive
我是节点的新手,对异步回调有些头疼。
我正在编写一个脚本来 ping 服务器列表,并希望 return 一个数组来表示它们的状态('OK' 如果所有主机都是 'pingable')
hostaddr = [ '10.102.14.20', '10.102.14.21', '10.102.14.22' ];
pingstat = testping(hostaddr, function(err, callback) {
console.log(callback);
});
const exec = require('child_process').exec;
var testping = function(hostaddr,callback) {
var pingstat = [];
for (let i = 0; i < hostaddr.length; i++) {
const child = exec('ping -c 1 ' + hostaddr[i],
(error, stdout, stderr) => {
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
if (error !== null) {
console.log(`exec error: ${error}`);
} else {
pingstat.push("OK");
callback(pingstat);
}
});
}
}
我希望测试函数 return pingstat ['OK,'OK','OK'] 如果所有主机都 ping 成功,但我的代码不起作用,请帮助
我会尝试这样的事情:
const exec = require('child_process').exec;
var testping = function(hostaddr,callback) {
var pingstat = [];
for (let i = 0; i < hostaddr.length; i++) {
const child = exec('ping -c 1 ' + hostaddr[i],
(error, stdout, stderr) => {
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
if (error !== null) {
console.log(`exec error: ${error}`);
pingstat.push("ERROR");
} else {
pingstat.push("OK");
}
if (pingstat.length == hostaddr.length) {
callback (pingstat);
}
});
}
}
var hostaddr = [ '10.102.14.20', '10.102.14.21', '10.102.14.22' ];
var pingResults = null;
var hostaddr = [ '192.168.2.54' ,'192.168.2.541'];
testping(hostaddr, function(results) {
console.log("Ping results: " + results);
// Save results.
pingResults = results;
});
var express = require('express');
var app = express();
app.get('/pingResults', function(req, res, next) {
res.status(200);
res.header("Content-Type", "application/json");
res.end(JSON.stringify({pingResults: pingResults}));
});
app.get('/pingresultslive', function(req, res, next) {
testping(hostaddr, function(results) {
console.log("Ping results: " + results);
res.status(200);
res.header("Content-Type", "application/json");
res.end(JSON.stringify({pingResults: pingResults}));
});
});
var httpPort = 8081;
console.log('Listening on port: ' + httpPort);
app.listen(httpPort);
您还可以通过将错误详细信息附加到 "ERROR" 字符串来在结果数组中包含更多错误信息。
因此,您现在可以保存结果并使用 curl 进行查询: 卷曲 http://localhost:8081/pingresults 或者你可以现场直播 卷曲 http://localhost:8081/pingresultslive