最详细的Promise文章

文章介绍了Promise在处理异步操作中的重要性,它解决了回调地狱的问题,提供了一种更好的链式处理方式。Promise构造函数接受一个函数参数,该函数有两个形参resolve和reject。Promise实例有pending、fulfilled和rejected三种状态,可以通过调用resolve或reject改变。then和catch方法用于处理成功和失败的情况,可以链式调用并捕获错误。
摘要由CSDN通过智能技术生成

我将围绕以下几个问题来讲解promise

1、为什么需要Promise?Promise解决了什么问题?

2、Promise作为构造函数,需要什么参数?各个参数有什么用?

3、Promise的实例有什么状态,如何改变实例的状态?

4、promise有哪些方法?及其使用方法。

一、为什么需要Promise?

在开发中经常会遇到一种场景,即第一次发起请求,但第二次发起请求就需要拿到第一次请求响应的数据,第三次发起请求需要拿到第二次请求响应的数据,以此类推,最终形成了常说的回调地狱。因为XMLHttpRequest对象请求都是异步的所以我们用定时器模仿回调地狱:

假设每一次调用定时器都是在发起一次异步请求,id,username,age是每次请求返回的数据
const time = 1000
setTimeout(()=>{   
  const id = '9999' // 第一次返回的数据,假设这个id就是返回的数据
  setTimeout(()=>{ 
     const username = '张三' // 第二次返回的数据,假设username就是返回的数据
     setTimeout(()=>{ 
        const age = 26  // 第三次返回的数据,以此类推,就是地狱回调
     },time)
   },time)
},time)

回调地狱产生的问题:开发体验差,不利于维护。而Promise解决了这个问题。

二、Promsie

Promise是一个构造函数它的参数是一个函数,这个函数又包含两个函数形参。

new Promise((resolve,reject)=>{
 resolve('success') //
 //reject('failed')
})

三、Promise实例

Promise实例包含三个属性

1、state:pending/fulilled/rejected

      这个状态是由Promise决定的,在未调用resolve或者rekected方法之前实例的状态是pending,如果在Promise当中调用resolve方法那么状态就是fulilled,同样调用的是rejected方法那么状态就是rejected,还有一种情况如果Promose函数里面代码出错了,那么实例状态也是rejected。

2、result:返回的是Promise中调用参数函数传的值

3、prototype:继承自Promise构造函数里面有很多方法后面介绍

四、Promise实例具备的方法

1、then(resolve,rejected): 

    a、then只有当实例状态发生改变时调用,也就是Promise中调用resolve、rejected。

     b、then可以返回当前的实例,并且如果当前的实例状态为rejected,那么可以变成fulilled。返回值将作为result属性值,它的默认值是undefined。

2、catch(err)

     a、catch方法会捕获then里面的错误,无论是resolve还是rejected回调中产生的错误catch都会捕获。

   b、然而实际开发中我们一般不写rejected回调,这是后catch也可以捕获Promise中产生的错误或者rejected回调传的参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值