zoukankan      html  css  js  c++  java
  • 手写简单的promise

    function Promise(fn) {
                    var that = this;
                    this.status = "pedding";
                    this.value = undefined; // 成功返回值
                    this.reason = undefined; // 失败返回值
                    this.onFulfilledArr = []; // 保存成功回调函数
                    this.onRejectedArr = []; // 保存失败的回调函数
    
                    // 成功
                    function resolve(value) {
                        if (that.status === "pedding") {
                            that.value = value;
                            // 依次执行回调函数
                            that.onFulfilledArr.forEach(fn => {
                                return fn(value);
                            });
                            that.status = "fulfilled";
                        }
                    }
                    // 失败
                    function reject(reason) {
                        if (that.status === "pedding") {
                            that.reason = reason;
                            that.onRejectedArr.forEach(fn => {
                                return fn(season);
                            });
                            that.status = "rejected";
                        }
                    }
                    //
                    fn(resolve, reject);
                }
                Promise.prototype.then = function(onFulfilled, onRejected) {
                    // return new Promise(function(resolve, reject) {
                    //     console.log(resolve);
                    // });
                    if (this.status === "pedding") {
                        if (typeof onFulfilled === "function") {
                            this.onFulfilledArr.push(onFulfilled);
                        }
                    }
                    if (this.status === "pedding") {
                        if (typeof onRejected === "function") {
                            this.onRejectedArr.push(onRejected);
                        }
                    }
                };
                var t = new Promise(function(resolve, reject) {
                    setTimeout(() => {
                        resolve(2);
                    }, 500);
                });
                t.then(data => {
                    console.log(data);
                });

    暂未实现then的链式调用

  • 相关阅读:
    HDU 2544 最短路
    HDU 3367 Pseudoforest
    USACO 2001 OPEN
    HDU 3371 Connect the Cities
    HDU 1301 Jungle Roads
    HDU 1879 继续畅通工程
    HDU 1233 还是畅通工程
    HDU 1162 Eddy's picture
    HDU 5745 La Vie en rose
    HDU 5744 Keep On Movin
  • 原文地址:https://www.cnblogs.com/chenzeyongjsj/p/10678878.html
Copyright © 2011-2022 走看看