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! =  =!
  • 相关阅读:
    LeeCode-Invert Binary Tree
    LeeCode-Contains Duplicate
    LeeCode-Linked List Cycle
    LeeCode-Number of 1 Bits
    LeeCode-Delete Node in a Linked List
    LeeCode-Same Tree
    LeeCode-String to Integer (atoi)
    单链表复习
    POJ1258 (最小生成树prim)
    HDU1248 (完全背包简单变形)
  • 原文地址:https://www.cnblogs.com/iamzhanglei/p/2924680.html
Copyright © 2011-2022 走看看