如何理解es6中的Promise?

js是单线程的,也就是说一次只能完成一个任务,为了解决这个问题,js将任务的执行模式分为两种, 同步和异步,

在es5中我们处理异步只能通过的回调的方式进行处理,在多层异步中,回调会一层一层嵌套,也就是所谓的回调地狱,

promise就是异步编程的一种解决方案

 
Promise

特点:

  • 对象的状态不受外界影响, promise对象代表一个异步操作,有三种状态pendding(进行中), fulfilled(成功), rejected(失败)

  • 一旦状态改变,就不会再变, 状态的改变只有两种可能, pendding => fulfilled及pendding => rejected

基本用法:

 

const promise = new Promise (function(resolve, reject){
        // ... some code    
     if (/* 异步操作成功 */){
          resolve(value); // 将状态从pendding变成fulfilled        
        } else {    
          reject(error); // 将状态从pendding变成rejected       
        }   
}); 

 

promise 生成实例后可以使用then方法接收resolved状态和rejected状态的回调函数

 promise.then( ()=> {
       console.log('resolved')
   }, () => {
       console.log('rejected')
   })

promise原型上具有catch方法, catch方法是rejection的别名, 用于指定发生错误时的回调函数

promise.then( ()=> {
       console.log('resolved')
   }, () => {
       console.log('rejected')
   }).catch( (err) => {
       console.log('catch')
   })

promise原型上具有finally方法,用于不管promise对象最后的状态如何,都会执行的操作

promise.then( ()=> {
       console.log('resolved')
   }, () => {
       console.log('rejected')
   }).finally( (err) => {
       console.log('end')
   })
Promise.all

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例

简单使用:

 

const p = Promise.all([p1, p2, p3]);

特点:

  • 参数都是promise实例,如果不是会调用promise.resolve方法将其转为promise实例

  • p的奖态由传入的promise实例的状态决定

    • promise实例状态都变成fulfilled,p状态为fulfilled

    • promise实例状态一个变成rejected,p状态为rejected  

转载于:https://www.cnblogs.com/MrJaven/p/11196054.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值