我喜欢在自定义函数中集成nodejs中的exec来处理这一函数中的所有错误。
const exec = require('child_process').exec;
function os_func() {
this.execCommand = function(cmd) {
var ret;
exec(cmd, (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
ret = stdout;
});
return ret;
}
}
var os = new os_func();
此函数返回undefined,因为值返回时exec未完成。 我怎么解决这个问题?我可以强制该函数等待exec吗?
答案 0 :(得分:7)
由于命令是异步执行的,因此一旦命令执行完毕,您将需要使用callback来处理返回值:
const exec = require('child_process').exec;
function os_func() {
this.execCommand = function(cmd, callback) {
exec(cmd, (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
callback(stdout);
});
}
}
var os = new os_func();
os.execCommand('SomeCommand', function (returnvalue) {
// Here you can get the return value
});
答案 1 :(得分:2)
你可以使用promise作为:
const exec = require('child_process').exec;
function os_func() {
this.execCommand = function (cmd) {
return new Promise((resolve, reject)=> {
exec(cmd, (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
resolve(stdout)
});
})
}
}
var os = new os_func();
os.execCommand('pwd').then(res=> {
console.log("os >>>", res);
}).catch(err=> {
console.log("os >>>", err);
})
答案 2 :(得分:1)
exec 将以异步方式处理它,因此您应该收到回调或返回一个承诺。
为了使其同步,您可以做的一件事是使用 execSync :
https://nodejs.org/api/child_process.html#child_process_child_process_execsync_command_options
child_process.execSync()方法通常与 child_process.exec(),但方法不会 返回直到子进程完全关闭。超时时 遇到并且发送了killSignal,该方法不会返回直到 这个过程已经完全退出。注意,如果子进程 截取并处理SIGTERM信号并且不退出父节点 进程将等待子进程退出。
答案 3 :(得分:0)
你可以通过回调来做到这一点。也许你可以尝试这样的事情:
public int example (int tall1, int tall2, int tall3, int tall4) {
int lowest = Math.min(tall1,tall2);
int lowest1 = Math.min(tall3, tall4);
int lowest2 = Math.min(lowest,lowest1);
return lowest2;
}