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的更多相关文章

  1. Finite State Machine 是什么?

    状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动       作.完成特定操作的控制中心. 类 ...

  2. State Machine.(状态机)

    What is a State Machine? Any device that changes its state from one to another due to some actions a ...

  3. Finite State Machine

    Contents [hide]  1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Dete ...

  4. Qt: The State Machine Framework 学习

    State Machine,即为状态机,是Qt中一项非常好的框架.State Machine包括State以及State间的Transition,构成状态和状态转移.通过状态机,我们可以很方便地实现很 ...

  5. Android4.0中蓝牙适配器state machine(状态机)的分析

    今天晓东和大家来一起看一下Android4.0中蓝牙适配器(Bluetooth Adapter)的状态机变化的过程.首先,我们需要了解一下,蓝牙适配器究竟有哪些状态,从代码可以清晰地看到(framew ...

  6. 控制结构(3) 状态机(state machine)

    // 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...

  7. 控制结构(3): 状态机(state machine)

    // 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...

  8. 【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 ...

  9. 【翻译】What is State Machine Diagram(什么是状态机图)?

    [翻译]What is State Machine Diagram(什么是状态机图)? 写在前面 在上一篇学习类图的时候将这个网站上的类图的一篇文章翻译了出来,感觉受益良多,今天来学习UML状态机图, ...

  10. unity5, animator state machine, 无条件transition实现播放动画序列

    今天遇到这样一个需求,我有一个名为happy的animation clip和一个名为speak的animation clip.想实现当主角胜利后播放动序列: happy->speak->h ...

随机推荐

  1. FCKeditor编辑器第一次点击总是报错(上传图片) 之后就好了

    错误:   Failed to execute 'getRangeAt' on 'Selection': 0 is not a valid index. FCKeditor编辑器第一次点击总是报错(上 ...

  2. SSA与ASS字幕

    SSA字幕与ASS字幕 SSA全称SubStationAlpha,是由CSLow(又称Kotus)创建的一种字幕格式,用以实现比传统字幕诸如srt等格式更为复杂的功能.SSA目前的版本为v4.00.S ...

  3. qemu通过控制台向虚拟机输入组合键

    ctrl+alt+2 开启控制台 ctrl+alt+1 关闭控制台 在控制台中输入 sendkey ctrl-alt-delete 发送指令

  4. python 设计模式之组合模式Composite Pattern

    #引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...

  5. Windows上安装nodejs版本管理器nvm 安装成功之后重启终端失效

    nvm 安装成功之后重启终端失效(command not found) 安装nvm之后node不可用,“node”不是内部或外部命令,也不是可运行的程序或批处理文件(ng) 安装nvm: 下载nvm压 ...

  6. 【原创】aws s3 lambda缩略图生成

    参考资料: https://github.com/sagidm/s3-resizer https://aws.amazon.com/cn/blogs/compute/resize-images-on- ...

  7. MySQL远程连接和备份还原

    连接远程数据库 mysql -h 数据库地址 -P 端口号 -u 用户名 -p mysql -h -u root -p 备份数据库, 热备份 mysqldump -h 127.0.0.1 -u roo ...

  8. Scala里面的排序函数的使用

    排序方法在实际的应用场景中非常常见,Scala里面有三种排序方法,分别是: sorted,sortBy ,sortWith 分别介绍下他们的功能: (1)sorted 对一个集合进行自然排序,通过传递 ...

  9. Spring cloud微服务安全实战-3-14章节小结

    认证:一个httpBasic 一个是用户名密码的认证 授权:数据库内判断的r就是读 w就是写 ,ACL 获取用户信息的这段逻辑,实际上着也是安全机制的一种.防止越权,当前只能看到自己的信息. Spri ...

  10. linux传输文件lrzsz

    linux传输文件