模拟任务流程编排(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)
上一篇:微软官方提供的SqlHelper类,完整版并附中文注释详解
下一篇:xamarin开发之旅《底部菜单实现篇》《二》

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月04日 17时01分11秒