async 和 await 两种语法结合可以让异步代码像同步代码一样
async 函数
1. async 函数的返回值为promise对象
2. promise 对象的结果由async函数执行的返回值决定
async function fn() {
//返回一个字符串
//返回结果不是一个 promise 类型的对象,返回的结果就是成功的 promise 对象
// return 'hello world';
// 抛出错误,返回的结果是一个失败的 promise
// throw new Error('出错了');
//返回结果是一个promise对象
return new Promise((resolve.reject) => {
resolve('成功啦'); // fn 是一个成功 promise
reject('出错了'); // fn 是一个失败 promise
});
}
const result = fn();
console.log(result);
//调用 then 方法
result.then((res) => {
console.log(res); //成功啦
},(err) => {
console.log(err); //出错了
})
await 表达式
1. await 必须写在 async 函数中
2. await 右侧的表达式一般为 promise 对象
3. await 返回的是 promise 成功的值
4. await 的 promise 失败了,就会抛出异常,需要通过 try...catch 捕获处理
// 创建promise对象
const p = new Promise((resolve, reject) => {
// resolve('执行成功啦');
reject('执行失败啦');
});
//await 要放在 async 函数中
async function fn () {
try {
let result = await p;
console.log(result); // 执行成功啦
}catch(e) {
console.log(e); // 执行失败啦
}
}
//调用函数
fn();