UNPKG

@logicflow/engine

Version:

a process engine for javascript

79 lines (78 loc) 2.59 kB
import { Engine } from '.'; import Recorder from './recorder'; import FlowModel from './FlowModel'; import EventEmitter from './EventEmitter'; /** * 调度器 * 通过一个队列维护需要执行的节点,一个集合维护正在执行的节点 */ export declare class Scheduler extends EventEmitter { /** * 当前需要执行的节点队列 */ nodeQueueMap: Map<Engine.Key, Engine.NodeParam[]>; /** * 当前正在执行的节点集合 * 在每个节点执行完成后,会从集合中删除 * 同时会判断次集合中是否还存在和此节点相同的 executionId,如果不存在,说明该流程已经执行完成 */ actionRunningMap: Map<Engine.Key, Scheduler.ActionParamMap>; /** * 流程模型,用于创建节点模型 */ flowModel: FlowModel; /** * 执行记录存储器 * 用于存储节点执行的结果 */ recorder?: Recorder; constructor(config: Scheduler.ISchedulerProps); /** * 添加一个任务到队列中。 * 1. 由流程模型将所有的开始及诶带你添加到队列中 * 2. 当一个节点执行完成后,将后续的节点添加到队列中 * @param nodeParam */ addAction(nodeParam: Engine.NodeParam): void; private pushActionToRunningMap; private removeActionFromRunningMap; /** * 为了防止多次添加导致 * @param actionParam */ private saveActionResult; private hasRunningAction; /** * 调度器执行下一个任务 * 1. 提供给流程模型,用户开始执行第一个任务 * 2. 内部任务执行完成后,调用此方法继续执行下一个任务 * 3. 当判断没有可以继续执行的任务后,触发流程结束事件 * @param runParam */ run(runParam: Scheduler.ActionParam): void; private next; /** * 恢复某个任务的执行 * 可以自定义节点手动实现流程中断,然后通过此方法恢复流程的执行 * @param resumeParam */ resume(resumeParam: Engine.ResumeParam): Promise<void>; private interrupted; private error; private exec; } export declare namespace Scheduler { type ActionParam = { executionId: Engine.Key; actionId?: Engine.Key; nodeId?: Engine.Key; data?: Record<string, unknown>; [key: string]: unknown; }; type ActionParamMap = Map<Engine.Key, ActionParam>; interface ISchedulerProps { flowModel: FlowModel; recorder?: Recorder; } } export default Scheduler;