执行 async 函数,返回的都是 Promise 对象
async function test1() {
return 1;
}
async function test2() {
return Promise.reslove(2);
}
const result1 = test1();
const result2 = test2();
console.log('resutl1', result1);
console.log('result2', result2);
result1 是一个 Promise 对象,result2 也是一个 Promise 对象。得出了规律:
当一个异步函数返回一个普通值时,会被封装为一个 Promise 对象后再返回;
如果异步函数返回的是 Promise 对象,就会返回这个 Promise 对象。
Promise.then 成功时情况 对应 await
async function test3() {
const p3 = Promise.resolve(3);
p3.then(data => {
console.log('data1', data)
})
const data = await p3;
console.log('data2', data);
}
test3();
// data1 p3
// data2 p3
async function test4() {
const data = await 4; // 相当于 Promise.resolve(4);
console.log('data', data);
}
test4(); // data 4
async function test1() {
return 1;
}
async function test5() {
const data = await test1(); // test1 是异步函数,返回的是 Promise 对象,Promise结果为 1。
// 然后 await 又相当于 Promise.resolve(1)
console.log('data', data);
}
test5(); // data 1
这三种是在 await 中常见的写法
- await 直接跟一个 Promise 对象
- await 直接跟一个普通值
-
Promise.catch 异常的情况对应 try … catch
```javascript async function test6() { const p6 = Promise.reject(6);
const data = await p6; console.log(‘data6’, data); }
test6();
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1753568/1619768786172-a7e9dbe1-70ee-4205-a8a9-4640e5df60e5.png#align=left&display=inline&height=25&margin=%5Bobject%20Object%5D&name=image.png&originHeight=25&originWidth=210&size=1447&status=done&style=none&width=210)<br />确实打印出 6,但是异常是没有被捕获到。<br />使用 try ... catch 来捕获异常。
```javascript
async function test6() {
const p6 = Promise.reject(6);
try {
const data = await p6;
console.log('data6', data);
} catch (e) {
console.error('e', e);
}
}
test6();
这时异常就可以被捕获了。