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)
        }
    };
  • 相关阅读:
    延迟加载和缓存
    动态SQL
    Mybatis框架模糊查询+多条件查询
    mybatis增删改
    初始mybatis(二)
    Struts2框架和SpringMvc框架的区别
    MyBatis框架与Hibernate 框架的区别
    初始mybatis
    Servlet
    find命令使用
  • 原文地址:https://www.cnblogs.com/peter-web/p/14959842.html
Copyright © 2011-2022 走看看