码迷,mamicode.com
首页 > 其他好文 > 详细

Promise 的 用法及实现

时间:2018-01-14 22:54:12      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:stat   prot   成功   this   第一个   fun   func   col   run   

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 的 用法及实现

标签:stat   prot   成功   this   第一个   fun   func   col   run   

原文地址:https://www.cnblogs.com/xiaxiaodong/p/8284415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!