zoukankan      html  css  js  c++  java
  • 手写实现js Promise

    const PENDING = 'pending'
    const FULFILLED = 'fulfilled'
    const REJECTED = 'rejected'
    function Promise(executor) {
        var _this = this
        this.state = PENDING; //状态
        this.value = undefined; //成功结果
        this.reason = undefined; //失败原因
    
        this.onFulfilled = [];//成功的回调
        this.onRejected = []; //失败的回调
        function resolve(value) {
            if(_this.state === PENDING){
                _this.state = FULFILLED
                _this.value = value
                _this.onFulfilled.forEach(fn => fn(value))
            }
        }
        function reject(reason) {
            if(_this.state === PENDING){
                _this.state = REJECTED
                _this.reason = reason
                _this.onRejected.forEach(fn => fn(reason))
            }
        }
        try {
            executor(resolve, reject);
        } catch (e) {
            reject(e);
        }
    }
    Promise.prototype.then = function (onFulfilled, onRejected) {
        if(this.state === FULFILLED){
            typeof onFulfilled === 'function' && onFulfilled(this.value)
        }
        if(this.state === REJECTED){
            typeof onRejected === 'function' && onRejected(this.reason)
        }
        if(this.state === PENDING){
            typeof onFulfilled === 'function' && this.onFulfilled.push(onFulfilled)
            typeof onRejected === 'function' && this.onRejected.push(onRejected)
        }
    };
  • 相关阅读:
    Excel如何根据基类标红重复内容
    使用FRP配置Windows远程控制
    CentOS 7安装gevent
    CentOS7安装pip
    把音频文件压缩变小的方法
    Linux中nohup和&的用法和区别
    Windows下安装redis服务
    TFS解锁命令
    linux下用rpm 安装jdk
    avascript的匿名函数
  • 原文地址:https://www.cnblogs.com/peter-web/p/14959842.html
Copyright © 2011-2022 走看看