dispatchIpcRequest
分发IPC请求到对应的处理函数,支持映射表模式和动态导入模式。
前置依赖
依赖参数(动态导入模式)
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.resolve | Path['resolve'] | 路径解析函数 |
函数签名
typescript
function dispatchIpcRequest(
req: IpcRequest,
options:
| { handlerMap: IpcHandlerMap }
| { functionsDir: string; deps: IpcDeps }
): Promise<any>
interface IpcRequest {
event: string // 动态事件名
args: any // 动态参数
}
interface IpcHandlerMap {
[eventName: string]: {
default: (...args: any[]) => any | Promise<any>
}
}
interface IpcDeps {
resolve: Path['resolve']
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
req.event | string | 是 | 事件名称 |
req.args | any | 是 | 事件参数 |
options.handlerMap | IpcHandlerMap | 是(映射表模式) | 事件名和处理函数的映射表 |
options.functionsDir | string | 是(动态导入模式) | 函数目录的绝对路径 |
options.deps | IpcDeps | 是(动态导入模式) | 依赖函数 |
返回值
| 类型 | 说明 |
|---|---|
Promise<any> | Promise,返回处理函数的执行结果 |
异常
| 错误类型 | 触发条件 | 错误信息 |
|---|---|---|
Error | 找不到对应的处理器 | Handler not found for event: {event} |
Error | 处理器不是函数 | Handler for event '{event}' is not a function |
Error | 选项无效 | Invalid options: must provide either handlerMap or functionsDir with deps |
工作原理
映射表模式(推荐)
- 从
handlerMap中查找对应事件名的处理器 - 验证处理器是否存在且为函数
- 调用处理器的
default方法,传入req.args - 返回处理结果
动态导入模式(向后兼容)
- 使用
resolve解析函数文件路径 - 动态导入函数模块
- 验证模块的
default导出是否为函数 - 调用函数,传入
req.args - 返回处理结果
映射表模式兼容性更好,推荐使用。动态导入模式适用于需要按需加载的场景。