【发布时间】:2020-10-10 19:32:49
【问题描述】:
在我的应用程序中,我有一个回调函数,它等待电子数据发送回 Angular,然后显示更改。我可以更改值,但在 HTML 文件中没有注意到。所以显示了错误的数据。
component.ts 中的函数:
public async startDefault(): Promise<void> {
try {
this.oDefaultLoader.startLoading();
this.setNewvalues("api", {
max: 1,
cur: 0
});
setTimeout((): void => {
this.setNewvalues("api", {
max: 19,
cur: 5
});
}, 6000);
await this.electron.sendIpcPipe("startDefault", async (oData: IIpcChainResponse): Promise<void> => {
console.log(oData);
this.setNewvalues("api", {
max: oData.max,
cur: oData.cur
});
}, this.settings.oSetting);
this.oDefaultLoader.stopLoading();
} catch (oErr) {
this.oDefaultLoader.stopLoading();
console.log(oErr);
}
}
// Background Actions
private setNewvalues(sSet: "api" | "bo", oValues: IProgressObject): void {
this.oDefaultStart = deepMergeObject(this.oDefaultStart, {
[sSet]: oValues
} as IDefaultStart);
console.log(this.oDefaultStart.api);
}
sendIpcPipe 函数:
public async sendIpcPipe<T, U>(sEndpoint: string, fnPipe: (data: T) => Promise<void>, oArgs?: U): Promise<void> {
if (this.electron.isElectronApp) {
return new Promise<void>((resolve: Function, _reject: Function): void => {
const oListener: (_event: Electron.IpcRendererEvent, oResponse: T) => Promise<void> = async (
_event: Electron.IpcRendererEvent,
oResponse: T
): Promise<void> => {
if (oResponse as unknown as number === 0) {
this.electron.ipcRenderer.off(sEndpoint + "Response", oListener);
resolve();
} else {
await fnPipe(oResponse);
}
};
this.electron.ipcRenderer.on(sEndpoint + "Response", oListener);
this.electron.ipcRenderer.send(sEndpoint, oArgs);
});
}
return;
}
仅用于显示对象的 HTML 代码:
<div>
{{ oDefaultStart.api | json }}
</div>
更新
如果我在sendIpcPipe 的回调函数之外使用setNewvalues,它工作正常。但在外面什么都没有,或者只是有时发生了一些变化。
【问题讨论】:
-
查看 Anguar.core 库中的 ChangeDetector 类。特别是 detectChanges 方法。
-
这没什么用。我不知道我是否应该使用这个“提示”。
标签: angular typescript callback electron