Skip to content

Instantly share code, notes, and snippets.

@ppxu
Created February 15, 2017 06:38
Show Gist options
  • Save ppxu/91ac938c357d545e00119efb704c5879 to your computer and use it in GitHub Desktop.
Save ppxu/91ac938c357d545e00119efb704c5879 to your computer and use it in GitHub Desktop.

Revisions

  1. ppxu created this gist Feb 15, 2017.
    61 changes: 61 additions & 0 deletions lazyman.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    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);
    }