异步加载的Javascript代码中不允许使用document.write向页面载入内容
一:与Promise的区别
使用promise异步请求可是缓解es5异步请求的回调地狱,还需要使用then方法并传入回调函数,看起来还不够清爽。
let p = new Promise((resolve)=>{
setTimeout(() => {
resolve('月薪3000怎么办');
}, 5000);
});
p.then((res)=>{
alert(res);
});
二:async和await
async和await配合使用,可以使异步请求看起来跟同步请求一样清爽利索。比如对上面代码的改造
let p = new Promise((resolve)=>{
setTimeout(() => {
resolve('月薪3000怎么办');
}, 5000);
});
async function timer(){
let res = await p;
console.log(res);
}
timer();
// 如果上面timer中把res return出来,那么在执行timer时需要加上await关键字。而await又不能单独
// 使用,所以还需要用async函数把await包起来接收
可以看到,通过await可以直接接收resolve方法中传入的值,即避免了promise调用then方法并传入回调函数的步骤。直接声明变量接收数据异步请求的数据即可,使代码看起来跟同步一样。
await后面需要跟着Promise实例,axios刚好就返回promise实例,所以他们配合使用就很丝滑。如下
- 如下为普通axios请求:
//普通的axios请求
axios({
url:"/api/TimeLineRead/foreend",
method:"post"
}).then((res)=>{
let json = res.data.data;
});
- 如下为配合await使用:
async function getJson(){
let yeah = await axios({url:"/api/TimeLineRead/foreend",method:"post"})
// 开始处理yeah
}
摆脱调用then方法,直接接收resolve的传参。