node.js 中通常的 exec 结构是:
exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
是否可以像这样将标准输出值插入外部变量:
var newLS = ''
exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
newLS = stdout;
});
console.log(newLS)
如果您尝试使用上述方法,“newLS”变量将不会改变。 有什么方法可以将标准输出值存储到外部变量中吗?
有一个可能的选择:
newLS = exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
console.log(newLS)
但在这种情况下,newLS 将存储一个带有服务信息的大型 json(类似于 json)对象,而没有输出本身。
问题是,exec 是异步的,因此在 exec 进程完成之前,您最终会调用外部 console.log。在 console.log 之前,您必须等待该过程完成。
像这样的东西应该可以解决问题:
const newLS = await new Promise((resolve, reject) => {
exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err)
reject(err)
}
console.log(stdout)
resolve(stdout)
})
})
console.log(newLS)
execSync
来使其成为一个同步过程。