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 ...
随机推荐
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- Spark(五十一):Spark On YARN(Yarn-Cluster模式)启动流程源码分析(二)
上篇<Spark(四十九):Spark On YARN启动流程源码分析(一)>我们讲到启动SparkContext初始化,ApplicationMaster启动资源中,讲解的内容明显不完整 ...
- 启动项目报错:Unsupported major.minor version 52.0
解决方案: 确保Build Path或者电脑配置的环境变量版本号,和pom中的一致 Exception in thread "main" java.lang.Unsupported ...
- Code Quality and Security | SonarQube
SonarQube - 国内版 Binghttps://cn.bing.com/search?FORM=U227DF&PC=U227&q=SonarQube Code Quality ...
- 惠普打印机和扫描仪修复医生 HP Print and Scan Doctor
https://support.hp.com/cn-zh/topic/printscandoctor-printing-problems http://ftp.hp.com/pub/printers/ ...
- 一起入门Python1之python的介绍
之前在某安全论坛发表的一些关于python的文章,但是由于一些问题一直没有完成,那个论坛也歇菜了.放到这儿来吧. 说句默心掏肺的话,我也是才学习python.之所以要这个版主,是为了锻炼自己,也是为了 ...
- 五、postman-sandbox
一.在postman中运行一些JavaScript代码的地方 公共库(javascript) 环境变量与全局变量 动态变量 操作cookie 获取和查看请求及响应 读取数据文件 二.api文档 htt ...
- pytorch如何先初始化变量,然后再赋值
下面是定义初始化 #初始化输入的张量 - torch.empty是返回一个包含未初始化数据的张量 self.input = torch.empty(size=(self.opt.batchsize, ...
- canvas固定画布
canvas作为非常方便的HTML绘图工具在web端的应用是非常多了. 那么会碰到一个问题,开始绘图的时候,网页总是晃动. 怎么办呢?只需在获取鼠标(触点)移动坐标的时候,添加清除默认动作就可以了. ...
- matlab基本函数find
一起来学演化计算-matlab基本函数find 觉得有用的话,欢迎一起讨论相互学习~Follow Me 找到非零元素的索引和值 语法 k = find(X) k = find(X)返回一个向量,其中包 ...