
模拟任务流程编排(nodejs)
发布日期:2021-05-08 04:53:52
浏览次数:24
分类:原创文章
本文共 2341 字,大约阅读时间需要 7 分钟。
实现一个TaskMan,当:
TaskMan('john')/** output:hi, I am john*/
TaskMan('john').doSomething('go to work')/** output:hi, I am johndoSomething go to work*/
TaskMan('john').sleep(3).doSomething('go to work')/** output:hi, I am johnsleeping...0sleeping...1doSomething go to work*/
TaskMan('jianyong').doSomething('go to work').sleep(3).doSomething('go home').sleepFirst(5)/** output:sleep 5 first...sleeping...0sleeping...1sleeping...2sleeping...3hi, I am jianyongdoSomething go to worksleeping...0sleeping...1doSomething go home*/
可以通过一个函数队列实现:
class _TaskMan { constructor(name) { this.tasks = [] this.name = name this.tasks.push(() => { console.log('hi, I am ' + this.name) this.next() }) setTimeout(() => this.next(), 0) } next() { let fn = this.tasks.shift() fn && fn() } doSomething(taskname) { this.tasks.push(() => { console.log('doSomething ' + taskname) this.next() }) return this } sleep(n) { this.tasks.push(() => { let counter = 0 let timer = setInterval(() => console.log('sleeping...' + counter++), 1*1000) setTimeout(() => { this.next() clearTimeout(timer) }, n*1000) }) return this } sleepFirst(n) { this.tasks.unshift(() => { console.log(`sleep ${n} first...`) let counter = 0 let timer = setInterval(() => console.log('sleeping...' + counter++), 1*1000) setTimeout(() => { this.next() clearTimeout(timer) }, n*1000) }) return this }}function TaskMan(name) { return new _TaskMan(name)}//TaskMan('john')//TaskMan('john').doSomething('go to work')//TaskMan('john').sleep(3).doSomething('go to work')//TaskMan('jianyong').doSomething('go to work').sleep(3).doSomething('go home').sleepFirst(5)
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月04日 17时01分11秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++中头文件相互包含与前置声明
2019-03-06
JQuery选择器
2019-03-06
MVC中在一个视图中,怎么加载另外一个视图?
2019-03-06
SQL--存储过程
2019-03-06
MVC学习系列5--Layout布局页和RenderSection的使用
2019-03-06
MVC学习系列13--验证系列之Remote Validation
2019-03-06
多线程之volatile关键字
2019-03-06
2.1.4奇偶校验码
2019-03-06
2.2.2原码补码移码的作用
2019-03-06
多线程之Lock显示锁
2019-03-06
ForkJoinPool线程池
2019-03-06
【Struts】配置Struts所需类库详细解析
2019-03-06
Java面试题:Servlet是线程安全的吗?
2019-03-06
DUBBO高级配置:多注册中心配置
2019-03-06
Java集合总结系列2:Collection接口
2019-03-06
Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
2019-03-06
大白话说Java反射:入门、使用、原理
2019-03-06
集合系列 Set(八):TreeSet
2019-03-06
JVM基础系列第11讲:JVM参数之堆栈空间配置
2019-03-06
MySQL用户管理:添加用户、授权、删除用户
2019-03-06