async/await
1)async/await场景
这是一个用同步的思维来解决异步问题的方案,当前端接口调用需要等到接口返回值以后渲染页面时。
2)名词解释
>async
async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行, async 函数返回的是一个promise 对象。
>await
await的含义为等待。意思就是代码需要等待await后面的函数运行完并且有了返回结果之后,才继续执行下面的代码。这正是同步的效果
例子如下:await要放在async中,并且await后面的函数运行后必须返回一个Promise对象才能实现同步的效果。
1.api/ajax.js
import axios from 'axios'
export default function ajax(url = '',params = {} ,type = 'GET'){
let promise;
return new Promise((resolve ,reject)=>{
// 判断请求的方式
if(type == 'GET'){
let paramsStr = '';
Object.keys(params).forEach( key=>{
paramsStr += key+'='+params[key]+'&';
})
if(paramsStr != ''){
paramsStr = paramsStr.substr(0,paramsStr.lastIndexOf('&'));
}
url+='?'+paramsStr;
promise = axios.get(url);
}else{
promise = axios.post(url,params)
}
promise.then((res)=>{
resolve(res.data)
}).catch((err)=>{
reject(err);
})
})
}
2.api/index.js
import ajax from './ajax'
const BASE_URL = 'https://localhost:3000/';
//请求方法
export const getHomeCasual = ()=>ajax(BASE_URL+'Homeapp.do');
3.组件中调用请求方法
import { getHomeCasual } from './../api/index'
created(){
this.getHomeData();
},
methods:{
// 请求数据 async/await=>异步转为同步
async getHomeData (){
const result = await getHomeCasual();
console.log(result);
}
}
axios 常规用法
new Vue({
el:"#app",
created(){
this.ajaxData();
},
mothods:{
ajaxData(){
const result = axios.get('/homeapp.do').then((res)=>{
console.log(res);
})
.catch((err)=>{
console.log(res);
})
}
}
})
axios 同步用法
new Vue({
el:"#app",
created(){
this.ajaxData();
},
mothods:{
async ajaxData(){
const result = await axios.get('/homeapp.do');
console.log(result);
}
}
})