Promise 的 用法及实现

Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。

语法
  new Promise( function(resolve, reject) { 函数体 });

在函数体中,调用 resolve 会把状态改为成功 , reject 把状态改为失败,状态只可操作一次.

状态改变之后,会继续执行Promise的then函数

Promise 对象一共有三个状态 ( [[ PromiseStatus ]] ) :

  pending : 初始状态

  fullfilled : 成功

  rejected : 失败 

Promise的方法很少:

  Promise.all( Promise数组 )

    当 所有的Promise的状态成功后,执行成功,有任何一个Promise失败时 则立刻执行失败

  Promise.race( Promise数组 )

    以第一个状态改变的 promise 的状态 来确定 成功 还是 失败

  Promise.reject( str )

    任务失败

  Promise.resolve( value )

    任务成功

  Promise.prototype.catch( onRejected )

    捕获过程中的错误

  Promise.prototype.then( onFulfilled , onRejected )

    处理成功或者失败的状态

接下来 我们用js脚本来实现一个 Promise 的简单实现

function _Promise( func ){
    var status = 'pending';
    var then_success_array = [];
    var then_fail_array = [];
    function resolve(){
        if( status === 'pending' ){
            status = 'fullfilled';
        }
        runNext()
    }
    function reject(){
        if( status === 'pending' ){
            status = 'rejected';
        }
        runNext()
    }
    function runNext(){
        // 在这里运行 then 函数
        if( status === 'fullfilled' ){
            then_success_array.forEach(function(value){
                value();
            })
        }else{
            then_fail_array.forEach(function(value){
                value();
            })
        }
    }
    this.then = function( onS , onF ){
        then_success_array.push(onS);
        then_fail_array.push(onF)
    }
    func(resolve,reject)
}

 

转载于:https://www.cnblogs.com/xiaxiaodong/p/8284415.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值