如何在控制台日志之外获取 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()
}
}
我正在使用 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()
}
}