/**
* 일렉트론에는 메인쪽에서 요청한 결과를 렌더러에서 처리하고 다시 돌려줄 API 가 존재하지 않는다.
* 예를들어 메인에서 렌더러에 컨펌 메세지를 띄우고 사용자가 확인을 했는지 취소를 했는지 다시 메인에서 응답을 받아볼 방법이 없다.
* 이러한 처리를 하기위한 헬퍼 함수이다.
* @param channel .
* @param callFuncName .
* @param params .
* @returns .
*/
public async invoke(channel: string, callFuncName: string, params: any): Promise<any> {
// 같은 채널로 여러번에 요청이 있을수 있으므로 각 채널별로 응답받을 키를 만든다.
const asyncKey = dayjs().format('YYYYMMDDHHmmssSSS');
// Promise 로 응답받을때까지 대기
return new Promise((resolve, reject): any => {
// 응답받는 채널은 중복나지 않도록 `async:${channel}:${asyncKey}` 로 요청한다.
ipcMain.once(`async:${channel}:${asyncKey}`, async (event: any, result: any): Promise<void> => {
resolve(result);
});
// 렌더러에 요청한다. 이때 asyncKey 를 추가로 전달한다.
this.webContents.send(channel, { asyncKey, callFuncName, params });
});
}