zoukankan      html  css  js  c++  java
  • 原生JavaScript实现一个简单的Promise构造函数示例

    下面demo示例,只支持实例的then和catch,代码如下:

    function PromiseDiffer(fn){
        var self = this;
        this.status = 'pendding';
        this.value = undefined;
        this.reason = null;
        function resolve(data) {
            self.status = 'fulfilled';
            self.successFn && self.successFn(data);
            self.value = data;
        }
        function reject(error) {
            self.status = 'rejected';
            self.errorFn && self.errorFn(error);
            self.reason = error;
        }
        
        fn && fn(resolve,reject);
        
        PromiseDiffer.prototype.then = function(onFulfilledCallback,onRejectedCallback) {
            if(this.status == 'fulfilled') {
                onFulfilledCallback && onFulfilledCallback(this.value);
            }
            if(this.status == 'rejected') {
                onRejectedCallback && onRejectedCallback(this.reason);
            }
            this.successFn = onFulfilledCallback;
            this.errorFn = onRejectedCallback;
            return this;
        }
        
        PromiseDiffer.prototype.catch = function(onRejected) {
            return this.then(null, onRejected);
        }
        
    }

    调用方式跟Promise一样,如下:

    var promise = new PromiseDiffer(function(resolve,reject){
        resolve('1');
    })
    promise.then(function(data){
        console.log(data)
    }).catch(function(err){
        
    })

    后续再添加完善其他方法。

  • 相关阅读:
    composer require 指定版本
    后台管理,有无限可能
    str_replace 批量查找替换字符串
    node项目配置成nginx启动
    nodejs项目安装ant design
    in_array的三个参数
    Tp5.1使用导出Excel
    php 中 public private protected的区别
    Seafile 文件访问日志时间不一致问题
    du -sh *
  • 原文地址:https://www.cnblogs.com/moqiutao/p/14484261.html
Copyright © 2011-2022 走看看