ES6的新增特性promise对象

最近复习es6,以此做笔记

     为解决ajax多次请求,并且依赖上一次结果的多次请求造成的代码可读性差,消耗更多的等待时间,以及不容易维护的问题,而新增了特性promise,promise能更合理规范的进行异步处理操作。

(一)基本用法:

let pro = new Promise(function(resolve,reject){
     //pending状态
       if(true){
         //fulfilled状态
         resolve("操作成功")
       }else{
        //rejected状态
          reject("操作失败")
     }
})
 

pro.then(function(res){
    //用于绑定操作成功后的处理程序
})

pro.catch(function(err){
    //用于绑定处理失败和操作异常后的处理程序
})

promise对象是全局对象,也可以理解为一个类,创建promise的时候需要new实例,参数是一个匿名函数,匿名函数的两个参数resolve和reject,resolve是处理异步操作成功后的业务,reject是处理异步操作失败后的业务。

promise对象有三个状态:
  1.pending : 刚刚创建实例的时候,表示初始状态,

  2.fulfilled : resolve方法调用的时候,表示操作成功状态,

  3.rejected : reject方法调用的时候,表示操作失败状态,

状态只能是从初始化 > 成功,初始化 > 失败,不能逆向进行,也不能失败和成功之间转换。

(二)举例:

let pro = new promise(function(resolve,reject){
     //pending状态
     if(true){
        resolve("处理操作成功事件")
     }else{
        reject("处理操作失败事件")
     }
})

pro.then(requesta)
   .then(requestb)
   .then(requestc)
   .catch(requestd)

function requesta(){
    console.log('请求a完成')
    return '可以调用请求b了,'
}

function requestb(res){
   console.log(res + '请求b完成')
   return '可以调用请求c了,'
}

function requestc(res){
  console.log(res + '请求c完成')
}

function requestd(err){
 console.log('请求失败')
}

//打印结果......
//请求a完成
//可以调用请求b了,请求b完成
//可以调用请求c了,请求c完成

使用了then方法按顺序调用,很直观的就能看清楚调用的顺序,层层依赖,方法调用成功后把下一个方法需要的参数一并return过去,供下一步操作使用

(三)promise.all()方法:
promise.all()方法接受数组为参数,数组的元素需要为promise实例,当实例中的状态都为fulfilled时候,promise.all()才会有返回

实例:

let pro1 = new promise( resolve=>{
     setTimeout(function(){
        resolve('实例1操作成功')
     },1000)
})

let pro2 = new promise( resolve =>{
    setTimeout(function(){
        resolve('实例2操作成功')
    },3000)
})

promise.all([pro1,pro2]).then(result =>{
    console.log(result)
})

//打印结果
//['实例1操作成功','实例2操作成功']

promise.race()方法和promise.all()基本相同,不同之处在于数组中的任何一个promise实例进入fulfilled状态或者rejected就会有返回,不管事成功还是失败都会返回,并且其他实例再有状态变换那也不管了。

实例:

let pro1 = new promise( resolve=>{
     setTimeout(function(){
        resolve('实例1操作成功')
     },1000)
})

let pro2 = new promise( resolve =>{
    setTimeout(function(){
        resolve('实例2操作成功')
    },3000)
})

promise.race([pro1,pro2]).then(result =>{
    console.log(result)
}).catch(err =>{
    console.log(err)
})

//打印结果
//实例1操作成功

promise.all()和promise.race()方法在一些逻辑需求中可以说是恰到中用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值