写项目经常碰到先进性一个axios请求,然后在进行下一个axios请求,但是此次的请求需要,用到上一次请求返回来的参数,因为axios是异步的,所以可以axios请求嵌套获取,但当数据多的时候,页面会非常的乱,此时就需要用到async和await的使用,使上述情况就好像写同步代码一样,请看例子
这是两个axios请求的函数

//第一个
function axiosOne(){
returen axios.get(url)
};
var dataOne = {  //这里dataOne假如是 axiosOne请求回来的数据
        msg:"成功"
        code:0
 }
//第二个
function axiosTwo(params){
returen axios.get(url,{params})
 }
var dataTwo = [    //这里dataTwo 假如是 axiosTwo请求回来的数据
 {  
     name:"朱康宇"
     age:23 
 }
]

我们第二个请求获取列表的时候需要使用第一个请求得到的code值,当做参数传进去,那么我们看一下常规的做法吧

function data() {
	dataOne().then(res => {
		//这里是成功请求了axiosOne返回一个dataOne 的JSON对象
		//在这之后再去请求axiosTwo
		let params = res.code
		axiosTwo(params).then(res => {
		//这里返回的就是axiosTwo返回一个dataTwo 的JSON对象
		//这是最原生的写法 ,一旦数据过多,代码就变得不清晰
		})
	})
}
data();

下面我们用es6中新的特性 asyns和await来写,注意:await的使用需要在asyns的函数内部去使用否则会报错

async function data() {
	let codes = await axiosOne(); //这里的codes 就是请求axiosOne的返回JSON对象也就是dataOne
	let params = codes.code
	let lists = await axiosTwo(); //这里的lists 就是请求axiosTwo的返回JSON对象也就是dataTwo
}
data()  
//这样写是不是就简单多了,即使数据多,代码也很清晰

当然还剩最后一点,处理异常,可以加上try catch

async function data() {
   try{
	let codes = await axiosOne(); //这里的codes 就是请求axiosOne的返回JSON对象也就是dataOne
	let params = codes.code
	let lists = await axiosTwo(); //这里的lists 就是请求axiosTwo的返回JSON对象也就是dataTwo
	}catch(err){
	console.log(err);
   }
}

做vue项目的时候,如果对于异常没有特殊处理,可以不加try catch
在这里简单解释一下为什么这样写,异步的请求,变成了同步的代码

  • 首先在函数面前声明一个async 说明这个函数是一个异步函数
  • 带async关键字的函数,它使得你函数的返回值必定是promise对象
  • 当走到函数前边带有声明的await函数时 ,await会等待右侧表达式的结果,也就是说,右侧如果是函数,name函数的return值就是—表达式的结果;右侧如果是一个’hello’或者什么值,那表达式的结果就是’hello’
  • 这里注意,一般await关键字要在async关键字函数的内部,await写在外面会报错。文章开始也提到了
Logo

前往低代码交流专区

更多推荐