一个只有99行代码的JS流程框架

最近一直在想一个问题,如何能让js代码写起来更语义化和更具备可读性。node

上周末的时候突发奇想,当代码在运行的时候,其实跟咱们作事情是相似的,都是作完一步接着下一步,而且这些事情有些是可规划的,有些是须要作完该步才知道下一步该作什么。想到这里一个js框架雏形在我大脑中慢慢造成,暂且命名为flowJS。框架

接着说说这个框架应该有哪些API?

一、能够预先规划好流程的每一步,如this.setNext('步骤A').setNext('步骤B')……异步

二、能够在任何一步决定下一步作什么,如 this.setNext('步骤C'),其实这里的API和上面的同样,只是调用的地方不同而已。this

三、在任何一步中,能够知道当前步是在作什么,前面一步作了什么、下一步准备要作什么,如this.getCurr()this.getPrev()this.getNext()spa

四、当前步作完后,能将结果告诉下一步(仅仅是下一步能获取到当前步传递的结果,也就是为了保护变量污染,每一步都只能获取到前一步的结果),如 给下一步传值this.nextData({name1:value1,name2:value2,……})、获取上一步传来的值this.stepData(name1)或this.stepData()3d

五、能够设置或获取整个流程的全局变量,这样全部的步骤都能共享该变量,如 设置全局变量值this.flowData({name1:value1,name2:value2,……}),获取全局变量值this.flowData(name1)或this.flowData()code

六、上一步能够知道当前步的执行结果,成功 or 失败,如 在上一步中设置this.setNext('步骤B', successFun, failFun)、当前步中经过this.success(args)、this.fail(args)来告诉上一步。blog

七、当前步能够随时通知下一步开始执行,如this.next()接口

八、有些步骤能并行执行,而且要都执行完才能执行下一步,如 this.setNext('步骤A').setNext([步骤B1,步骤B2,步骤B3]).setNext('步骤C')开发

九、能够在任什么时候候知道当前代码流程运行过的轨迹,如flowJS.trace,这对于了解页面的执行过程会比较有帮助。

Talk is cheap, Show me the code!

一、能够预先规划好流程的每一步,如this.setNext('步骤A').setNext('步骤B')……

二、能够在任何一步决定下一步作什么,如 this.setNext('步骤C') ,其实这里的API和上面的同样,只是调用的地方不同而已。

三、在任何一步中,能够知道当前步是在作什么,前面一步作了什么、下一步准备要作什么,如 this.getCurr() 、this.getPrev() 、this.getNext() 。

四、当前步作完后,能将结果告诉下一步(仅仅是下一步能获取到当前步传递的结果,也就是为了保护变量污染,每一步都只能获取到前一步的结果),如 给下一步传值this.nextData({name1:value1,name2:value2,……})、获取上一步传来的值this.stepData(name1)或this.stepData()

五、能够设置或获取整个流程的全局变量,这样全部的步骤都能共享该变量,如 设置全局变量值this.flowData({name1:value1,name2:value2,……}),获取全局变量值this.flowData(name1)或this.flowData()

六、上一步能够知道当前步的执行结果,成功 or 失败,如 在上一步中设置this.setNext('步骤B', successFun, failFun)、当前步中经过this.success(args)、this.fail(args)来告诉上一步。

七、当前步能够随时通知下一步开始执行,如this.next()

八、有些步骤能并行执行,而且要都执行完才能执行下一步,如 this.setNext('步骤A').setNext([步骤B1,步骤B2,步骤B3]).setNext('步骤C')

九、能够在任什么时候候知道当前代码流程运行过的轨迹,如flowJS.trace,这对于了解页面的执行过程会比较有帮助。

其实flowJS的用法并不限于上面demo列出的方式,好比你能够试着在某一步中连续调用几回this.next(),你会发现下一步会被触发屡次。想要知道更多用法,能够把咱们平时看到的流程图信息套用到里面去实现。

可能有人会用Promise来跟flowJS对比,其实Promise更多的是为了解决JS异步回调的问题,而flowJS不只也能解决异步回调问题,还能让代码看起来更加语义化和流程化,使得代码更具可读性。

特别是在处理那种好比提交一个数据前,须要作一连串的校验和接口调用的时候,会更加适合,若是哪天须要在中间穿插一个校验或接口调用,只须要往流程中添加一步就能够了,彻底作到松耦合。

flowJS不只能用于页面JS开发,一样在nodeJS横行的时代,必须也是支持在服务端的nodeJS来使用的,无任何第三方依赖!

好了,安利了那么多,如今来看看这个只有99行代码的框架的真面目 ↓

我真的没有压缩代码,它真的只有99行!

最后提示: 框架源码和各demo在附件中可下载!

本文转载自腾云阁,已得到做者受权。

相关文章
相关标签/搜索