浅淡Promise

Promise我认为出来的主要目的是为了解决回调地狱 

回调地狱

回调函数嵌套回调函数,如果嵌套的层级过多,称为回调地狱

注意:

  • 回调地狱:本身对于实现代码功能是没有任何问题的。

  • 缺点是: ==可读性差,后期不好维护==。

回调地狱写法

axios.get('接口1')
  .then(res => {
     // res.data就是后端响应的数据   
     axios.get('接口2')
       .then(res => {
           // res.data就是后端响应的数据
           axios.get('接口3')
             .then(res => {
                  // res.data就是后端响应的数据
                   axios.get('接口4')
                     .then(res => {
                          // res.data就是后端响应的数据
                      })
              })
        })
  })

Promise

  • Promise 是es6新增的构造函数,主要用于管理 “ 异步操作 ”。

  • Promise一共有三种状态: 进行中、已成功、已失败

  • 状态变化有两种情况,一旦变化完成,就不可逆,状态就确定了:

    • 进行中 -》已成功

    • 进行中 -》已失败 

        基本语法 

// 创建实例对象
const p = new Promise(( resolve,  reject ) => {
    /*
      new去调用Promise的时候,会自动往函数中传入两个参数
      第一个参数传给resolve, 是一个函数。如果想要让Promise的状态从 进行中 -》 已成功,就调用 resolve()
      第二个参数传给reject,是一个函数。如果想要让Promise的状态从 进行中 -》 已失败,就调用 reject()
    */
    
    if ( 成功 ) {
        // 让状态从 进行中 -》 成功
        resolve('成功')
    } else {
        // 让状态从 进行中 -》 失败
        reject('错误信息')
    }
})


p.then( (data) => {
    //  如果上一步调用了 resolve() 就会触发then的回调函数, 接收传入的数据
} ).catch( (err) => {
    // 如果上一步调用了 reject() 就会触发catch的回调函数, 接收传入的错误信息
} )

Promise解决回调地狱

new Promise((resolve) => {
    axios.get('接口1').then(res => {
       resolve(res.data) // 状态切换 进行中 -》 成功
    })
})
 .then(data => { // 上一步调用 resolve() 就会触发then中的回调函数 把数据传进来
    return new Promise(resolve => {
       axios.get('接口2?带上第一个接口参数').then(res => {
          resolve(res.data) // 状态切换 进行中 -》 成功
       })
    })
 })
 .then(data => {
    // 如果还有下一个then 必须返回一个Promise的实例对象 才能调用 resolve() 把数据传给下一个then
    return new Promise(resolve => {
        axios.get('接口3?带上第二个接口的参数').then(res => {
        	resolve(res.data)
    	})
    })
 })
 .then(data => {
    axios.get('接口4?带上第三个接口的参数').then(res => {
        console.log(res.data)
    })
})

async和await

        基本语法

# 1. async关键字,声明函数内部有异步操作
async function 函数名() 
}

const 变量 = async function () {
}

const 变量 = async () => {
}

# await关键字,用于等待一个Promise实例对象, 只能在async函数内部使用。
async function 函数名() 
   let 变量 = await Promise实例对象;

	# await的作用:
       1. 等待后面Promise实例对象状态切换完毕。
       2. 如果后面的Promise调用了resolve(),那么传入的结果,可以在左侧声明变量接收。
       3. await必须等到结果,后续的代码才能执行。
}

        使用例子

async function 函数名() {
   let res = await new Promise((resolve, reject) => {
       console.log('111')
       resolve('我是数据') // 把Promise状态切换为成功, 把数据给res
   })
   console.log(res)
    
   console.log('3333')
}

函数名()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值