我有一项服务,当我运行标记为#1的代码时,它将返回控制台中的数据,但是当我将其分配给变量时,则无法定义。
这是代码:
在服务中:
executeShell(command) {
exec(command, (error, stdout, stderr) => {
if (error) {
return stderr;
} else {
return stdout;
}
});
}
在component.ts中:
output: any; // define the variable
然后,如果我在下面运行#1:
this.electronService.executeShell('ls'); // #1
控制台上的输出是正确的。
但是,如果我尝试这样做:
this.output = this.electronService.executeShell('ls'); // #2
console.log(this.output); // #2
我不确定
我的问题是,#1返回控制台中的列表,但是#2返回未定义的列表。
我怎样才能解决这个问题?
最佳答案
该值是从回调返回的,因此它是异步的。您可能必须返回一个可观察到的/ promise 来捕获数据。尝试以下
服务
executeShell(command) {
let result = new BehaviorSubject<any>(null);
exec(command, (error, stdout, stderr) => {
if (error) {
result.error(stderr);
} else {
result.next(stdout);
}
});
return result.asObservable();
}
现在订阅该组件以获取通知。
成分
this.electronService.executeShell('ls').subscribe(
response => {
if(response) { // <-- default value of the observable is `null`
this.output = response;
}
},
error => {
this.output = error;
}
);
关于node.js - Angular/Electron服务输出传递给变量,但返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62469553/