如何在控制台日志之外获取 IPC 消息的值?

How to get the value of an IPC message outside of the console log?

我正在使用 electron 和 angular 开发一个应用程序,我试图在其中发送一些本地存储在我计算机上的信息。我能够在正确的时间成功地将消息从电子端发送到 angular 端。但是,除了在控制台日志中,我无法在其他任何地方访问该消息。

file.service.ts:

import { Injectable } from '@angular/core';
import { IpcRenderer } from 'electron';

@Injectable({
  providedIn: 'root'
})
export class FileService {
  private ipc: IpcRenderer | undefined;
  private filePath: string[];
  constructor() {
    if (window.require) {
      try {
        this.ipc = window.require('electron').ipcRenderer;
      } catch (error) {
        throw error;
      }
    } else {
      console.warn('Could not load electron ipc');
    }
    this.ipc.on('getFiles', (event, file) => {
      this.filePath = file;
      console.log('in service: ' + this.filePath); // correct
    });
  }

  public getFilePaths(): string[] {
    return this.filePath; // undefined
  }
}

app.component.ts的一部分:

export class AppComponent implements OnInit{
  constructor(private formBuilder: FormBuilder, private fileService: FileService) {
  }
  ngOnInit(): void {
    const bob: string[] = this.fileService.getFilePaths();
    console.log('in component: ' + bob); // undefined
}

我找到了另一种方法,但我无法从 promise 中获取消息。 file.service.ts:

import { Injectable } from '@angular/core';
import { IpcRenderer } from 'electron';

@Injectable({
  providedIn: 'root'
})
export class FileService {
  private ipc: IpcRenderer | undefined;
  constructor() {
    if (window.require) {
      try {
        this.ipc = window.require('electron').ipcRenderer;
      } catch (error) {
        throw error;
      }
    } else {
      console.warn('Could not load electron ipc');
    }
  }

  async getFiles(): Promise<string[]> {
    return new Promise<string[]>((resolve) => {
      this.ipc.on('getFiles', (event, info) => {
        resolve(info);
      });
    });
  }
}

app.component.ts的一部分:

export class AppComponent implements OnInit{
  constructor(private formBuilder: FormBuilder, private fileService: FileService) {
  }
  ngOnInit(): void {
    this.fileService.getFiles().then(console.log); // works, but only way to access message
}

如果有办法通过任一方法或其他方法将消息放入字符串 [] 变量中,我将不胜感激。

您可以使用第二种方法将异步方法解析为变量。

您可以尝试执行以下操作,看看是否有效吗?

export class AppComponent implements OnInit {
  private myVariable: string[]

  constructor(
   private formBuilder: FormBuilder, 
   private fileService: FileService
  ) { }

  async ngOnInit(): Promise<void> {
    this.myVariable = await this.fileService.getFiles()
  }
}