[javascript] promise 用法

Es6有个非常好用的特性就是Promise,它是异步编程的一个解决方案,主要用来解决回调地狱。异步编程通常能获得更好的性能和更大的灵活性。异步的最大特点是无需等待。

什么情况下会使用Promise:一般情况下是有异步操作时,会对Promise进行封装。

首先用setTimeout模拟异步网络请求,接口数据在then()函数内处理
new Promise(resolve,reject)默认resolve,reject传入两个参数,这两个是Promise自带的函数对象。
从字面意思上来看就知道这两个对象的具体作用
resolve——成功:接口请求成功
reject ——拒绝:接口请求失败

三种状态

1.pending :等待状态,比如正在进行网络请求,或者定时器没有到时间的时候。
2.fulfil: 满足状态,当我们主动回调了resolve()时,接口调用成功,就处于该状态,并且会回调.then()
3.rejcet: 拒绝状态,当我们主动回调了reject()时,接口调用失败,就处于该状态,并且会回调.catch()

  new Promise((resolve,reject)=>{
          // 第一次网络请求
          setTimeout(()=>{
              resolve() //调用成功函数
              
              reject('error message') //调用失败
          },1000) 
   }).then(()=>{
          //调用成功后
          console.log('第一次调用成功')
          })
   }).catch((err)=>{
           //调用失败后抓住错误信息
            console.log(err) //error message
   })

这样的一个then().catch()就是简单的链式调用

还有省略.catch()写法 ,then()传入两个函数对象,第一个函数对象内写请求成功函数,第二个函数对象内写请求失败函数。

 

  new Promise((resolve,reject)=>{
          // 第一次网络请求
          setTimeout(()=>{
              resolve('调用成功')
              reject('error message') 
          },1000)
          
   }).then(data=>{
           //请求成功
          console.log(data)  //调用成功
        
   
   },err=>{
        //请求失败
       console.log(err)  //error message
   })

Example:

 

// 在上面代码中 是实现了new出一个对象 定义了个常量来接收了 不用常量接收直接使用时
 
const num = 2;
 
new Promise((r,e) => {  // r(resolve)  e(reject)
    // 异步逻辑代码
    num === 1 ? r(num) : e(num) // 同一个逻辑中只能执行一种状态方式
}).then(res => {
    console.log(`num为1时被调用,num为:${res}`)
}).catch(err => {
    console.log(`num为2时被调用,num为:${err}`)
})
 
 
 

 

posted @ 2022-08-04 13:33  一波王炸  阅读(151)  评论(0)    收藏  举报