最近,写代码遇到一个需要做异步请求的需求,今天做一个记录。
第一步,全局引入axios有可能不行,记得重新引入axios,我之前就忘记重新引入axios就报错了。
import { AXIOS } from '../../../utils/axios'
第二步,在methods,新建async 函数,需要多个函数需要用到await运算符(await 等到Promise 对象 resolve的值,作为 await 表达式的运算结果return给函数),得到返回值后就可对返回值做相应的处理,不要在Promise 对象里对data做相应的处理,return时有时会出现参数丢失。
created(){
this.asyncFunction(id)
},
methods: {
async asyncFunction(id){
var await1 = await this.await1Function(id)
var await2 = await this.await2Function(id)
console.log(await1)
console.log(await2)
},
await1Function:(id)=>{
return new Promise((resolve, reject) => {
AXIOS.post("地址", {id:id}).then((res) => {
var list = res.data.list
resolve(list)
}).catch(error => {
// 失败返回
resolve('失败返回')
})
})
},
await2Function:(id)=>{
return new Promise((resolve, reject) => {
AXIOS.post("地址", {id:id}).then((res) => {
var list = res.data.list
resolve(list)
}).catch(error => {
// 失败返回
resolve('失败返回')
})
})
},
}
promise对象
1.1 promise对象可以获取异步操作的消息,可以解决异步中回调问题,自己不能进行异步。
1.2 promise有三种状态,pending (进行中),resolve (操作成功状态),rejected (操作失败)。
1.3promise不能逆向转向,只能从等待到完成或者拒绝状态
1.4then方法是promise的核心,then返回一个promise函数,而一个promise也可以多次调用then方法
1.5缺点:promise对象一旦执行了promise便无法中途取消,(当promise处于pending阶段的时候无法判断是开始还是结束的阶段,如果不设置回调函数,promise无法向外部抛出错误信息,一般来说,then回调函数的参数是resolve抛出的信息,catch回调函数的参数是reject和执行then抛出的错误信息,promise的内部错误不会影响外部错误,也就是说promise会吃掉函数。)