node.js - Angular/Electron服务输出传递给变量,但返回未定义

标签 node.js angular typescript electron angular9

我有一项服务,当我运行标记为#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/

相关文章:

javascript - Angular,HTTP Get 有效,Post 收到 CORS 错误

jquery - Angular 2/4 和 jquery 脚本

javascript - 在提交表单上显示模态

mysql - 如果在特定列中找到信息则执行查询

jquery - Node.js Express - 如何动态提供模型数据?

javascript - 如何从 Node 响应对象获取请求 URL?

typescript - react 路由器上的类型安全路由参数可能吗?

node.js - 带有 React 和 Node 的谷歌应用引擎 : Production setup

javascript - 嵌套的 Angular 响应式表单和组件重用

angular - 如何在 angular 4 应用程序中存储 api 的根 url?