javascript-state-machine
import StateMachine from 'javascript-state-machine'
import EventEmitter from 'events' /**
* 上传的文档的状态管理
*/ const STATES = {
NOT_UPLOAD: 'notUpload',
FILE_TOO_LARGE: 'fileTooLarge',
UPLOADING: 'uploading',
UPLOAD_SUCCESS: 'uploadSuccess',
UPLOAD_ERROR: 'uploadError',
CONVERTING: 'converting',
CONVERT_SUCCESS: 'convertSuccess',
CONVERT_ERROR: 'convertError',
} const TRANSITIONS = {
NOT_UPLOAD_TO_FILE_TOO_LARGE: 'notUploadToFileTooLarge',
NOT_UPLOAD_TO_UPLOADING: 'notUploadToUploading',
UPLOADING_TO_UPLOAD_SUCCESS: 'uploadingToUploadSuccess',
UPLOADING_TO_UPLOAD_ERROR: 'uploadingToUploadError',
UPLOAD_SUCCESS_TO_CONVERTING: 'uploadSuccessToConverting',
CONVERTING_TO_CONVERT_SUCCESS: 'convertingToConvertSuccess',
CONVERTING_TO_CONVERT_ERROR: 'convertingToConvertError',
} class SlideStateManager extends EventEmitter {
constructor(initState = STATES.NOT_UPLOAD) {
super() this.stateMachine = new StateMachine({
init: initState,
transitions: [
{
name: TRANSITIONS.NOT_UPLOAD_TO_FILE_TOO_LARGE,
from: STATES.NOT_UPLOAD,
to: STATES.FILE_TOO_LARGE,
},
{
name: TRANSITIONS.NOT_UPLOAD_TO_UPLOADING,
from: STATES.NOT_UPLOAD,
to: STATES.UPLOADING,
},
{
name: TRANSITIONS.UPLOADING_TO_UPLOAD_SUCCESS,
from: STATES.UPLOADING,
to: STATES.UPLOAD_SUCCESS,
},
{
name: TRANSITIONS.UPLOADING_TO_UPLOAD_ERROR,
from: STATES.UPLOADING,
to: STATES.UPLOAD_ERROR,
},
{
name: TRANSITIONS.UPLOAD_SUCCESS_TO_CONVERTING,
from: STATES.UPLOAD_SUCCESS,
to: STATES.CONVERTING,
},
{
name: TRANSITIONS.CONVERTING_TO_CONVERT_SUCCESS,
from: STATES.CONVERTING,
to: STATES.CONVERT_SUCCESS,
},
{
name: TRANSITIONS.CONVERTING_TO_CONVERT_ERROR,
from: STATES.CONVERTING,
to: STATES.CONVERT_ERROR,
},
],
methods: {
onNotUploadToFileTooLarge: () => {
this.emit(TRANSITIONS.NOT_UPLOAD_TO_FILE_TOO_LARGE)
},
onNotUploadToUploading: () => {
this.emit(TRANSITIONS.NOT_UPLOAD_TO_UPLOADING)
},
onUploadingToUploadSuccess: () => {
this.emit(TRANSITIONS.UPLOADING_TO_UPLOAD_SUCCESS)
},
onUploadingToUploadError: () => {
this.emit(TRANSITIONS.UPLOADING_TO_UPLOAD_ERROR)
},
onUploadSuccessToConverting: () => {
this.emit(TRANSITIONS.UPLOAD_SUCCESS_TO_CONVERTING)
},
onConvertingToConvertSuccess: () => {
this.emit(TRANSITIONS.CONVERTING_TO_CONVERT_SUCCESS)
},
onConvertingToConvertError: () => {
this.emit(TRANSITIONS.CONVERTING_TO_CONVERT_ERROR)
},
},
})
} stateMachine onNotUploadToFileTooLarge = (cb) => {
this.on(TRANSITIONS.NOT_UPLOAD_TO_FILE_TOO_LARGE, cb)
} onNotUploadToUploading = (cb) => {
this.on(TRANSITIONS.NOT_UPLOAD_TO_UPLOADING, cb)
} onUploadingToUploadSuccess = (cb) => {
this.on(TRANSITIONS.UPLOADING_TO_UPLOAD_SUCCESS, cb)
} onUploadingToUploadError = (cb) => {
this.on(TRANSITIONS.UPLOADING_TO_UPLOAD_ERROR, cb)
} onUploadSuccessToConverting = (cb) => {
this.on(TRANSITIONS.UPLOAD_SUCCESS_TO_CONVERTING, cb)
} onConvertingToConvertSuccess = (cb) => {
this.on(TRANSITIONS.CONVERTING_TO_CONVERT_SUCCESS, cb)
} onConvertingToConvertError = (cb) => {
this.on(TRANSITIONS.CONVERTING_TO_CONVERT_ERROR, cb)
}
} export default SlideStateManager
export {
TRANSITIONS as MACHINE_TRANSITIONS,
STATES as MACHINE_STATE,
}
javascript-state-machine的更多相关文章
- Finite State Machine 是什么?
状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动 作.完成特定操作的控制中心. 类 ...
- State Machine.(状态机)
What is a State Machine? Any device that changes its state from one to another due to some actions a ...
- Finite State Machine
Contents [hide] 1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Dete ...
- Qt: The State Machine Framework 学习
State Machine,即为状态机,是Qt中一项非常好的框架.State Machine包括State以及State间的Transition,构成状态和状态转移.通过状态机,我们可以很方便地实现很 ...
- Android4.0中蓝牙适配器state machine(状态机)的分析
今天晓东和大家来一起看一下Android4.0中蓝牙适配器(Bluetooth Adapter)的状态机变化的过程.首先,我们需要了解一下,蓝牙适配器究竟有哪些状态,从代码可以清晰地看到(framew ...
- 控制结构(3) 状态机(state machine)
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...
- 控制结构(3): 状态机(state machine)
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...
- 【UML】-NO.43.EBook.5.UML.1.003-【UML 大战需求分析】- 状态机图(State Machine Diagram)
1.0.0 Summary Tittle:[UML]-NO.43.EBook.1.UML.1.003-[UML 大战需求分析]- 状态机图(State Machine Diagram) Style:D ...
- 【翻译】What is State Machine Diagram(什么是状态机图)?
[翻译]What is State Machine Diagram(什么是状态机图)? 写在前面 在上一篇学习类图的时候将这个网站上的类图的一篇文章翻译了出来,感觉受益良多,今天来学习UML状态机图, ...
- unity5, animator state machine, 无条件transition实现播放动画序列
今天遇到这样一个需求,我有一个名为happy的animation clip和一个名为speak的animation clip.想实现当主角胜利后播放动序列: happy->speak->h ...
随机推荐
- MGI数据库挖掘 | MGI-Mouse Genome Informatics | InWeb database
做生物信息,遗传发育,分析数据的时候总是要narrow down分析范围,高通量数据尤其是基因表达,在庞大的confounder面前,缩小分析范围是必须的,否则你会一直在混沌中游荡. 看一篇文章:20 ...
- flink 读JDQ和写JDQ的流程
ReadFromJDQ3 1)消费JDQ的必要信息,通过参数传入,有6个参数 2)获取flink JDQ3的鉴权客户端 3)根据鉴权客户端获取消费属性的配置 4)构建应用环境ENV和checkpoin ...
- Mysql中 查询慢的 Sql语句的记录查找
Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...
- python gdal ogr osgeo
- 【maven】在pom.xml中引入对json-lib的依赖dependency
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</art ...
- vscode 常用设置与插件推荐
1.Chinese (Simplified) Language Pack for Visual Studio Code 适用于 VS Code 的中文(简体)语言包 2.Color Info Visu ...
- PHP过狗webshell编写过程
0x1 先上图: 0x2 编写过程 这里必须强调一下我内心的感觉,小阔爱前两天也研究了过狗的一句话了,然后我突然觉得大家都在进步,我研究点啥呢?不如也试试以前因为觉得自己不懂代码,而不会研究的免杀sh ...
- Ajax serialize()提交form表单不能上传file类型
前台form表单的提交方式有很多种,例如: 1. form表单submit直接提交的方法 2. Ajax提交的方法 3. jquery提交的方法 4. 原生js提交的方法 每一种方法都有它的优势和不足 ...
- 导出swagger2生成的文档
百度了好多篇用法,没法用.特此记录一下 一.下载项目 下载https://github.com/Swagger2Markup/spring-swagger2markup-demo下的项目,保存,注意文 ...
- Python3入门(十三)——常用内置模块之摘要模块hashlib/hmac
(1)hashlib hashlib提供了常见摘要算法:如MD5,SHA1等等 一个md5的加密示例如下: import hashlib m = hashlib.md5() m.update(&quo ...