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. 返回处理结果

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