У меня есть процессы ipcMain и ipcRenderer (электронная и угловая стороны). Как я могу переписать свой код для асинхронного получения данных из основного процесса? Подключение к базе данных осуществляется с помощью typeorm
Сторона средства визуализации (data.service.ts):
constructor(private _electronService: ElectronService) {}
getItems(): Observable<Item[]> {
return of(this._electronService.ipcRenderer.sendSync('get-items')).pipe(
catchError((error: any) => Observable.throw(error.json))
);
}
app.component.ts
@Component({
selector: 'App',
template: `<div style="text-align:center">
<h1>
Welcome to {{ title }}!
</h1>
<h2>Here is the contents of the database: </h2>
<div>
<ul style="list-style: none">
<li *ngFor="let item of itemList">
{{ item.name }}
</li>
</ul>
</div>
</div>`
})
export class AppComponent implements OnInit {
itemList: Item[];
constructor(private appservice: AppService) {}
ngOnInit(): void {
console.log('component initialized');
this.appservice.getItems().subscribe((items) => (this.itemList = items));
}
Основная сторона (index.ts):
import { app, BrowserWindow, ipcMain } from 'electron';
import { createConnection } from 'typeorm';
import { Item} from './assets/model/item.schema';
const createWindow = async () => {
const connection = await createConnection({
type: 'mssql',
host: 'server\\instance',
username: 'sa',
password: 'password',
port: 1433,
database: 'test',
synchronize: true,
logging: true,
entities: [ Item ],
});
const itemRepo = connection.getRepository(Item);
ipcMain.on('get-items', async (event: any, ...args: any[]) => {
try {
event.returnValue = await itemRepo.find();
} catch (err) {
throw err;
}
});