Skip to content

dispatchIpcRequest ​

分发IPC请求到对应的处理函数,支持映射表模式和动态导入模式。

前置依赖 ​

依赖参数(动态导入模式) ​

参数名类型说明
deps.resolvePath['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.eventstring是事件名称
req.argsany是事件参数
options.handlerMapIpcHandlerMap是(映射表模式)事件名和处理函数的映射表
options.functionsDirstring是(动态导入模式)函数目录的绝对路径
options.depsIpcDeps是(动态导入模式)依赖函数

返回值 ​

类型说明
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

工作原理 ​

映射表模式(推荐) ​

  1. 从 handlerMap 中查找对应事件名的处理器
  2. 验证处理器是否存在且为函数
  3. 调用处理器的 default 方法,传入 req.args
  4. 返回处理结果

动态导入模式(向后兼容) ​

  1. 使用 resolve 解析函数文件路径
  2. 动态导入函数模块
  3. 验证模块的 default 导出是否为函数
  4. 调用函数,传入 req.args
  5. 返回处理结果

映射表模式兼容性更好,推荐使用。动态导入模式适用于需要按需加载的场景。