Promise 的 用法及实现

Posted 十一云子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
}

 

以上是关于Promise 的 用法及实现的主要内容,如果未能解决你的问题,请参考以下文章

fetch的基本用法请求参数及响应结果

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

Promise原理及实现

Promise原理及实现

Promise 对象及相关面试题