码迷,mamicode.com
首页 > 其他好文 > 详细

初步了解 promise-02 简单手写源码

时间:2018-08-17 01:18:23      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:exp   log   require   ros   reason   enum   call   define   成功   

废话不多说··  直接上 简单手写 promise 源码   

/**
 *@ 简单手写 prosmise 方法
 */

const enum_pending = "pending";
const enum_resolved = "resolved";
const enum_rejected = "rejected";

function Promise(executor) {
    let selt = this;
    //初始化状态
    selt.value = undefined;
    selt.reason = undefined;
    selt.status = enum_pending;

    //定义存放then成功的回调数组
    selt.onResolvedCallbacks = [];
    selt.onRejectedCallbacks = [];

    //成功执行
    function resolve(value) {
        //等待的状态(pending)才可以执行 并设置成功的状态
        if (selt.status === enum_pending) {
            selt.value = value;
            selt.status = enum_resolved;
            selt.onResolvedCallbacks.forEach(fn => fn());
        }
    }

    //失败执行
    function reject(reason) {
        //等待的状态(pending)才可以执行 并设置失败的状态
        if (selt.status===enum_pending){
            selt.reason= reason;
            selt.status=enum_rejected;
            selt.onRejectedCallbacks.forEach(fn=>fn());
        }
    }
    //异常就走失败
    try {
        executor(resolve,reject);
    }catch (e) {
        reject(e);
    }

};
//定义 promise then 方法
Promise.prototype.then = function (onFulfilled, onRejected) {
    let self = this;
    //根据状态执行对应的方法
    if (self.status === enum_resolved) {
        onFulfilled(self.value);
    }
    if (self.status === enum_rejected) {
        onRejected(self.value);
    }
    if (self.status === enum_pending) {
        //保存回调函数
        self.onResolvedCallbacks.push(() => {
            onFulfilled(self.value);
        });
        self.onRejectedCallbacks.push(() => {
            onRejected(self.value);
        })
    }

}

module.exports = Promise;

  调用:

let Promise = require("./01.promise");

let promise = new Promise((resolve,reject)=>{
    resolve()
})

promise.then((data)=>{
    console.log("成功·");
},(err)=>{
    console.log("失败·");
});

  

初步了解 promise-02 简单手写源码

标签:exp   log   require   ros   reason   enum   call   define   成功   

原文地址:https://www.cnblogs.com/liujzcom/p/9490990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!