@logicflow/engine
Version:
a process engine for javascript
79 lines (78 loc) • 2.59 kB
TypeScript
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;