对Promise的理解

1.promise是什么

Promise是最早提出和实现的一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和更强大

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例

Promise 对象用来封装一个异步操作并可以获取其成功/失败的结果值

2.promise的特点

Promise对象的状态不受外界影响

Promise对象有三种状态:
(1)pendding:表示初始状态;
(2)fulfilled:resolve方法调用的时候,表示操作成功; 
(3)rejected:reject方法调用的时候,表示操作失败;

状态只能从pendding---->fulfilled或者pendding---->rejected,不能逆向转换

3.Promise 构造函数的基本用法

let p = new Promise(function (resolve, reject) {
    // 此处做一个异步的事情  要么成功要么失败
    resolve('成功的回调')
    // reject('失败的回调')
})

//then( )方法:用于绑定处理操作后的处理程序。
//参数是两个函数,第一个用于处理操作成功后的业务,第二个用于处理操作异常后的业务。
p.then((res)=>{
    console.log(res)
},(error)=>{
    console.log(error)
})
//catch只接受一个参数,用于处理操作异常后的业务
p.catch((reason)=>{
    console.log(reason)
})

//综合上面的两个方法,大家都建议将then方法用于处理操作成功,catch方法用于处理操作异常

3.1Promise.all 方法

参数:接受一个数组,数组内都是Promise实例
返回值:返回一个Promise实例,这个Promise实例的状态转移取决于参数的Promise实例的状态变化。当参数中所有的实例都处于resolve状态时,返回的Promise实例会变为resolve状态。如果参数中任意一个实例处于reject状态,返回的Promise实例变为reject状态

Promise.all = function(promises){
     return new Promise(function(resolve,reject){
       let done = gen(promises.length,resolve);
       for(let i=0;i<promises.length;i++){
         promises[i].then(function(data){
           done(i,data);
         },reject);
      }
   });
}

 3.2Promise.race 方法

参数:接受一个数组,数组内都是Promise实例
返回值:返回一个Promise实例,这个Promise实例的状态转移取决于参数的Promise实例的状态变化。只要有一个状态发生变化(不管是成功fulfilled还是异常rejected),它就会有返回,其他实例中再发生变化,它也不管了

Promise.race = function(promises){
      return new Promise(function(resolve,reject){
        for(let i=0;i<promises.length;i++){
          promises[i].then(resolve,reject);
        }
    });
}

 4.为什么要用Promise?

每次请求都依赖上一次请求返回的数据来作为参数,然后继续发出请求,层层嵌套,会形成回调地狱。Promise可以解决回调地狱也可以解决请求异步问题。

  • 指定回调函数的方式更加灵活

       旧的: 必须在启动异步任务前指定

       promise: 启动异步任务 => 返回 promie 对象 => 给 promise对象绑定回调函数(甚至可以在异步任务结束后指定多个)

  • 支持链式调用, 可以解决回调地狱问题

       什么是回调地狱? 回调函数嵌套调用, 外部回调函数异步执行的结果是嵌套的回调执行的条件,格式上不断地进行缩进。

  • 回调地狱的缺点:不便于阅读、不便于异常处理
  • 回调地狱解决方案:promise 链式调用

       终极解决方案:async/await


原文链接:https://blog.csdn.net/qq_50906507/article/details/128041614

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值