ES2017中引入async函数,据某实际工作人员透露,目前公司相比于promise,更常用async处理异步操作,所以async函数的学习还是很有必要的,以下只是简易版,后期结合实际项目详细介绍async的用法
es2017标准引入了async函数,是的异步操作变得更加方便;
async和await语法结合可以使异步代码像同步代码一样
- async 函数的返回值为 promise 对象,
- promise 对象的结果由 async 函数执行的返回值决定
- await 必须写在 async 函数中
- await 右侧的表达式一般为 promise 对象
- await 返回的是 promise 成功的值
- await 的 promise 失败了, 就会抛出异常, 需要通过 try…catch 捕获处理
例如,读取文件的操作:
function get(){
return new Promise((resolve,reject) =>{
fs.readFile("./summer的csdn文章.md",(err,data)=>{
if(err) reject(err);
resolve(data);
})
}
}
async function res(){
let result = await get();
console.log(result.toString());//输出文章内容
}
可以看出,async和await结合使用,可以使读取文件操作变得十分简洁,多个文件读取,我们还可以封装一个专门读取文件的函数,这样二者结合的简便性更突出了。
同样,我们可以尝试使用async和await结合封装ajax请求:
function getAjaxData(url){
return new Promise((resolve,reject)=>{
//创建ajax对象
var xhr = new XMLHttpRequest();
//初始化ajax对象
xhr.open("GET",url);
//发送请求
xhr.send();
//事件绑定
xhr.onreadystateChange = function(){
if(xhr.readystate === 4){
if(xhr.status >= 200 && xhr.status < 300){
resolve(xhr.respose);
}else{
reject(xhr.status);
}
}
}
}
}
//测试封装(这是一个笑话接口)
getAjaxData("https://api.gugudata.com/news/joke/demo");
下图是接口返回的数据
async用法远不止如此,后期详细介绍,同步、异步是一个重点和难点,后期会出专栏。