Angular / 电子服务输出传递给变量但返回未定义
Angular / Electron service output passed to variable but returning undefined
我有一个服务,当我 运行 标记为 #1 的代码时,它 returns 到控制台中的数据,但是当我将它分配给一个变量时,我得到了未定义。
代码如下:
在服务中:
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 returns 控制台中的列表,但 #2 返回未定义。
我该如何解决这个问题?
该值是 return 从回调中编辑的,因此它是异步的。您可能需要 return 和 observable/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;
}
);
我有一个服务,当我 运行 标记为 #1 的代码时,它 returns 到控制台中的数据,但是当我将它分配给一个变量时,我得到了未定义。
代码如下:
在服务中:
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 returns 控制台中的列表,但 #2 返回未定义。
我该如何解决这个问题?
该值是 return 从回调中编辑的,因此它是异步的。您可能需要 return 和 observable/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;
}
);