Lazyman
来源:互联网 发布:淘宝售后申请做工瑕疵 编辑:程序博客网 时间:2024/06/07 15:05
实现一个LazyMan,可以按照以下方式调用:
LazyMan(“Hank”)输出:
Hi! This is Hank!
LazyMan(“Hank”).sleep(10).eat(“dinner”)输出
Hi! This is Hank!
//等待10秒..
Wake up after 10
Eat dinner~
LazyMan(“Hank”).eat(“dinner”).eat(“supper”)输出
Hi This is Hank!
Eat dinner~
Eat supper~
LazyMan(“Hank”).sleepFirst(5).eat(“supper”)输出
//等待5秒
Wake up after 5
Hi This is Hank!
Eat supper
以此类推。
这是典型的JavaScript流程控制,问题的关键是如何实现任务的顺序执行。在Express有一个类似的东西叫中间件,这个中间件和我们这里的吃饭、睡觉等任务很类似,每一个中间件执行完成后会调用next()函数,这个函数用来调用下一个中间件。
对于这个问题,我们也可以利用相似的思路来解决,首先创建一个任务队列,然后利用next()函数来控制任务的顺序执行:
function _LazyMan(name) { this.tasks = []; var self = this; var fn =(function(n){ var name = n; return function(){ console.log("Hi! This is " + name + "!"); self.next(); } })(name); this.tasks.push(fn); setTimeout(function(){ self.next(); }, 0); // 在下一个事件循环启动任务}/* 事件调度函数 */_LazyMan.prototype.next = function() { var fn = this.tasks.shift(); fn && fn();}_LazyMan.prototype.eat = function(name) { var self = this; var fn =(function(name){ return function(){ console.log("Eat " + name + "~"); self.next() } })(name); this.tasks.push(fn); return this; // 实现链式调用}_LazyMan.prototype.sleep = function(time) { var self = this; var fn = (function(time){ return function() { setTimeout(function(){ console.log("Wake up after " + time + "s!"); self.next(); }, time * 1000); } })(time); this.tasks.push(fn); return this;}_LazyMan.prototype.sleepFirst = function(time) { var self = this; var fn = (function(time) { return function() { setTimeout(function() { console.log("Wake up after " + time + "s!"); self.next(); }, time * 1000); } })(time); this.tasks.unshift(fn); return this;}/* 封装 */function LazyMan(name){ return new _LazyMan(name);}
阅读全文
1 0
- LazyMan
- Lazyman
- Promise实现的lazyman
- js实现lazyMan
- 简易的lazyman实现
- lazyman js流程控制
- LazyMan题目讲解
- LazyMan深入解析和实现
- js实现lazyman(流程控制)
- LazyMan深入解析和实现
- 微信LazyMan笔试题的深入解析和实现
- 基于Ruby语言的Web自动化测试框架LazyMan安装介绍
- 微信LazyMan笔试题的深入解析和实现_0
- layer.js,,,分享一个好用的弹出层
- POJ3279 Fliptile题解 二进制枚举搜索法
- 分针网—每日分享:安装使用Mongoose配合Node.js操作MongoDB的基础教程
- Bit Twiddling Hacks
- c#无法从“方法组”转换为“String”或无法从“int”转换为“string”
- Lazyman
- zabbix 客户端安装
- C++使用SQLite步骤及示例
- ftp 简介及使用
- 前端js日期控件传时间类型到java后台转Date类型
- 配置Nginx支持ThinkPHP
- SDUTOJ 3865 珈百璃的堕落 大数取膜
- Python 边做边学 6 数据库构建
- 分针网—IT教育:Vue.js事件处理器与表单控件绑定