JavaScript流程控制,关键是如何实现任务的顺序执行。
来源:互联网 发布:淘宝模特纹身 编辑:程序博客网 时间:2024/05/24 00:06
实现一个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流程控制,关键是如何实现任务的顺序执行。
创建一个任务队列,再调用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); //闭包,执行方法后,调用next方法 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() { self.next(); console.log("Wake up after " + time + "s!"); }, time * 1000); } })(time); this.tasks.unshift(fn); return this;}function LazyMan(name){ //封装 return new _LazyMan(name);}
阅读全文
0 0
- JavaScript流程控制,关键是如何实现任务的顺序执行。
- 今天的任务是解析如何实现顺序表
- iOS 控制任务执行顺序
- 如何控制线程执行的先后顺序
- Android Executor 如何实现任务Runnable队列顺序执行
- 【Activiti工作流】8.流程实例,任务,执行对象控制流程的执行
- 从源码看AsyncTask是如何实现任务的串行执行的
- JavaScript的执行顺序
- javascript的执行顺序
- Javascript的执行顺序
- JavaScript的执行顺序
- javascript的执行顺序
- MySQL定时任务是如何实现的
- poky:单个任务是如何被执行的
- ROS下实现机器人序列任务的执行控制
- javascript的流程控制
- 多个Filter的执行顺序是如何确定
- 控制线程的执行顺序
- C++begin和end运算符的返回迭代器的类型如何判断
- bootStrap事例代码
- jmeter分布式布署遇到的问题
- 第6章 渲染Web视图---Apache Tiles 笔记2
- 丢掉PSEXEC使用wmi来横向渗透
- JavaScript流程控制,关键是如何实现任务的顺序执行。
- [SQL]数据分析人员如何快速入门SQL-SQL学习感悟(一)
- maya win10下的路径脚本
- fastjson 远程反序列化poc的构造和分析
- 数据结构——链表
- lucene笔记-001-新建索引和读取索引
- Java基础--------(8)继承
- 【用VC建立C++程序】
- [SQL]数据分析人员如何快速入门SQL-删除数据(二)