代码改变世界

码农干货系列【6】--javascript异步编程之:世界上最短的Promise库

2013-02-24 21:12  【当耐特】  阅读(6624)  评论(13编辑  收藏  举报

类库源码

    var Promise = function () {
        this.thens = [];
    };
    Promise.prototype = {
        resolve: function () {
            var t = this.thens.shift(), n;
            t && (n = t.apply(null, arguments), n instanceof Promise && (n.thens = this.thens));
        },
        then: function (n) {
            return this.thens.push(n), this;
        }
    }

使用方式

        function f1() {
            var promise = new Promise();
            setTimeout(function () {
               
                alert(1);
                promise.resolve();
            }, 1500)

            return promise;
        }

        function f2() {
            var promise = new Promise();
            setTimeout(function () {

                alert(2);
                promise.resolve();
            }, 1500)

            return promise;
        }

        function f3() {
            var promise = new Promise();
            setTimeout(function () {

                alert(3);
                promise.resolve();
            }, 1500)

            return promise;

        }

        function f4() {
                alert(4);
        }
      
        f1().then(f2).then(f3).then(f4)

类库思路

主要的思路就是将主Promise下的任务列表(thens)挂靠到子Promise下。当然该库可以封装至ajax、domready等耗时的场景当中,使其可以”thenable",如:

          $$.ajax("assets/xxx.php", {
                     method: "GET",
                     data: "q=1&rand=" + Math.random()
                 }).then(function (msg) {
                     alert(msg.responseText)
                 });
have fun! =  =!