es6 Promise, all, race 理解及应用

33 篇文章 1 订阅
29 篇文章 0 订阅

ES6中对promise的理解及它的实例方法?

1) promise是一种异步编程的解决方案(本身并不是异步操作)

2) 多个串联的异步操作形成回调地狱--promise解决了回调地狱

3) 三种状态: pending(进行中), fulfilled(已成功), rejected(已失败)

4) 特点:状态不受外界影响,只有异步操作的结果,决定当前是哪一种状态,

   一旦状态改变就不会再变(pending-->fulfilled, pending-->rejected)

5) 用法:promise是一个构造函数,用来生成Promise实例

6) Promise构造函数接收一个函数作为参数,这个函数有两个参数

  const p = new Promise(function(resolve,reject){

    resolve()//对象状态:从未完成变为成功,在异步操作成功的时候调用

    reject()//对象状态:从未完成变为失败,在异步操作失败的时候调用

  })

Promise实例中的三个方法 then, catch(),finally();

  1) then(): //当实例状态发生改变的时候的回调函数

    const p = new Promise(function(resolve,reject){

      setTimeout(()=>{

        const time = new Date().getTime();

        if(time % 2 == 0){//偶数

          resolve('成功的数据,time--'+time)

        }else{

          reject('失败的数据')

        }

      })

    })

    p.then((value)=>{//resolve 成功的状态

      console.log(value)

    },(reson)=>{ //失败的状态(catch也可以)

      console.log(reson)

    })

  2) catch() 用于指定发生错误的回调函数

    p.catch((value)=>{ //(then的第二个参数也可以)

      console.log(value)

    })

  3) finally() 无论Promise成功或失败都需要执行的操作。

    p.then((value)=>{

      console.log(value)

    }).catch((value)=>{

      console.log(value)

    })

    .finally(()=>{

      console.log('最后的结果')

    })

## Promise.all理解及应用场景

1)

 //用于将多个Promise实例,包装成一个新的Promise实例

//状态:all状态有p1,p2决定,三个状态成功,all返回成功,其中一个返回失败,all返回失败。

let p1 = new Promise((resolve,reject)=>{

  resolve('成功1')

})

let p2 = new Promise((resolve,reject)=>{

  //resolve('成功2')

  reject('sb')

})

//如果定义了自己的catch方法,all是不能触发的

<!-- .catch((v)=>{

   console.log('error')

}) -->

//参数可以不是数组,但必须是iterator接口.

let all = Promise.all([p1,p2]);

console.log(all) //

all.then((value)=>{

  console.log(1)

}).catch((res)=>{

  console.log(2)

})

2) 多个请求结果合并在一起

function fun1(){

  return new Promise((resolve,reject)=>{

    setTimeout(()=>{

      resolve('函数1')

    },1000)

  })

}

function fun2(){

  return new Promise((resolve,reject)=>{

    setTimeout(()=>{

      resolve('函数2')

    },2000)

  })

}

function fun3(){

  return new Promise((resolve,reject)=>{

    setTimeout(()=>{

      resolve('函数3')

    },3000)

  })

}

function initFun(){

  let allFun = Promise([fun1(),fun2(),fun3()])

  console.log(allFun)

  allFun.then((v)=>{

    console.log(v)

  })

}

initFun();

## Promise.race的用法以及使用场景

1 将多个Promise实例包装成一个新的Promise实例

race 和 all 大致用法相同。

race 和 all 区别?

all 返回都成功才成功,有一个不成功就返回失败。

race 只要实例中有一个改变状态,就会返回(无论是成功或失败)

function f1(){

  return new Promise((resolve,reject)=>{

    setTimeout(()=>{

      resolve('函数111')

    },1000)

  })

}

function f2(){

  return new Promise((resolve,reject)=>{

    setTimeout(()=>{

      reject('函数222')

    },2000)

  })

}

//调用

const pTrace = Promise.race([f1,f2]);

console.log(pTrace)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值