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的链式调用

  • 相关阅读:
    static用法
    Spring相关配置及工厂模式
    Mybatis的相关配置及理解
    jsp内置对象简介
    JAVA基础——接口的理解
    JAVA基础——抽象类以及final修饰符总结
    关于JAVA基础 ——继承的总结
    封装
    static的用法
    构造方法的重载
  • 原文地址:https://www.cnblogs.com/chenzeyongjsj/p/10678878.html
Copyright © 2011-2022 走看看