zoukankan      html  css  js  c++  java
  • 码农干货系列【6】javascript异步编程之:世界上最短的Promise库

    类库源码

        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! =  =!
  • 相关阅读:
    【BZOJ-1060】时态同步 树形DP (DFS爆搜)
    【BZOJ-1468】Tree 树分治
    【BZOJ-1097】旅游景点atr SPFA + 状压DP
    【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用流)
    【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)
    【BZOJ-2055】80人环游世界 上下界费用流 (无源无汇最小费用流)
    【BZOJ-3275&3158】Number&千钧一发 最小割
    【BZOJ-4562】食物链 记忆化搜索(拓扑序 + DP)
    【BZOJ-1367】sequence 可并堆+中位数
    【BZOJ-1455】罗马游戏 可并堆 (左偏树)
  • 原文地址:https://www.cnblogs.com/iamzhanglei/p/2924680.html
Copyright © 2011-2022 走看看