# async 与 await
- async 函数就是 Generator 函数的语法糖。
- 两个关键字,使得异步操作变得更加方便,并且拥有更好的语义,即:
async
表示函数里有异步操作await
表示紧跟在后面的表达式需要等待结果。
3. 注意
- 在 async 修饰的函数中,如果没有遇到await关键字相当于一直在主线程上执行任务。遇到后,会等待 await 执行完,之后再依次执行后面的代码(这样异步代码就跟同步代码一样书写和阅读,更好的语义)
- await 后一般跟一个异步操作,比如执行创建 promise 对象的函数。
- await 后的promise很可能会是一个rejecte 状态,所以一般用
try...catch...
包装起来。
4. 练习
// 修改promise部分的练习,使用async与await
function axios(params) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.send(null);
xhr.open(params.method, params.url);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log('请求成功');
resolve(JSON.parse(xhr.responseText));
} else {
console.log('请求失败');
reject(new Error(xhr.responseText));
}
}
}
});
}
async function requestData() {
try {
const res1 = await axios({
method: 'get',
url: 'http://localhost:3000/list'
})
console.log(res1);
const res2 = await axios({
method: 'get',
url: 'http://localhost:3000/list/2'
});
console.log(res2);
} catch (error) {
console.log(error);
}
};
requestData();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38