Javascript 如何从回调函数设置变量?
我有下面的函数Javascript 如何从回调函数设置变量?,javascript,node.js,Javascript,Node.js,我有下面的函数 function sh(cmd) { exec(cmd, (err, stdout, stderr) => { if (err) { console.log(err); std_value.flush(); std_value.set("error"); } else { console.log({stdout, stderr}); std_value.flush
function sh(cmd) {
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(err);
std_value.flush();
std_value.set("error");
} else {
console.log({stdout, stderr});
std_value.flush();
std_value.set(stdout);
console.log('std_value in ' + std_value.result);
}
});
console.log('std_value out ' + std_value.result);
return std_value.result;
}
我想
sh(cmd)
返回cmd
的输出。所以我使用了下面的方法(有点糟糕)。但是exec
是异步函数,因此外部std_值。结果将是上次调用的值。这是创建sh(cmd)
的正常方法,它将返回标准输出还是我应该使用承诺?您可以在这里使用承诺,因为您不能从回调/异步函数返回值
function sh(cmd) {
return new Promise((resolve, reject) => {
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(err);
std_value.flush();
std_value.set("error");
reject(err);
} else {
console.log({stdout, stderr});
std_value.flush();
std_value.set(stdout);
console.log('std_value in ' + std_value.result);
resolve(std_value.result);
}
});
})
}
sh().then(val => {
console.log(val); //this should console the value of std_value.result
})
注意:我不知道您从哪里获得的std_值
您可以在这里使用promise,因为您无法从回调/异步函数返回值
function sh(cmd) {
return new Promise((resolve, reject) => {
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(err);
std_value.flush();
std_value.set("error");
reject(err);
} else {
console.log({stdout, stderr});
std_value.flush();
std_value.set(stdout);
console.log('std_value in ' + std_value.result);
resolve(std_value.result);
}
});
})
}
sh().then(val => {
console.log(val); //this should console the value of std_value.result
})
注意:我不知道你从哪里得到的标准值
函数sh(cmd,回调){
exec(cmd,(err,stdout,stderr)=>{
如果(错误){
控制台日志(err);
标准_值。冲洗();
标准值设置(“错误”);
如果(!!回调){
回调(err);
}
}否则{
log({stdout,stderr});
标准_值。冲洗();
标准值设置(标准值);
日志('std_value in'+std_value.result');
如果(!!回调){
回调(标准值.result);
}
}
});
}
sh(“运行”,函数(结果){
控制台日志(结果);
});代码>
函数sh(cmd,回调){
exec(cmd,(err,stdout,stderr)=>{
如果(错误){
控制台日志(err);
标准_值。冲洗();
标准值设置(“错误”);
如果(!!回调){
回调(err);
}
}否则{
log({stdout,stderr});
标准_值。冲洗();
标准值设置(标准值);
日志('std_value in'+std_value.result');
如果(!!回调){
回调(标准值.result);
}
}
});
}
sh(“运行”,函数(结果){
控制台日志(结果);
});代码>副本的副本