@truenewx/tnxet
Version:
互联网技术解决方案:Electron扩展支持
33 lines (31 loc) • 1.52 kB
text/typescript
import * as StringUtil from '../../../tnxcore/src/util/string.ts';
import SafePromise from '../../../tnxcore/src/foundation/safe-promise.ts';
import {EventConstant} from '../constants.ts';
export default function request<T>(eventName: EventConstant, args: any[] = []): Promise<T> {
const {ipcRenderer} = require('electron'); // 在此处导入才能避免初始化加载electron时加载主进程库而出错
return new SafePromise<T>((resolve, reject) => {
let requestId = StringUtil.uuid32();
const listener = (event: any, responseId: string, error: any, ...result: any[]) => {
if (requestId === responseId) {
ipcRenderer.off(eventName.response, listener);
if (error) {
console.error(error);
if (Array.isArray(error)) {
error = error[0];
}
if (error instanceof Error) {
error = error.message || error.toString();
}
reject(error); // reject只能接受一个参数
} else {
// resolve只能接受一个参数,当有多个参数时,做为数组传递
resolve(result.length > 1 ? result : result[0]);
}
}
};
ipcRenderer.on(eventName.response, listener);
ipcRenderer.send(eventName.request, requestId, ...args);
}, error => {
window.tnx.error(error);
});
}