主题:theme: serene-rose
async 函数:
- async 是一个关键字,用于声明一个函数是异步的。
- async 函数总是返回一个 Promise。
- 如果 async 函数的返回值不是一个 Promise,它将自动被包装为一个已解析的 Promise。
- 在 async 函数内部,你可以使用 await 关键字等待一个 Promise 完成,这会暂停函数的执行,直到该 Promise 被解析。
await 必须在 async 函数里面使用
const response = await fetch('https://api.example.com/data'); // 这会抛出语法错误
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function returnPromise() {
return new Promise((resolve, reject) => {
console.log("不等待");
setTimeout(() => {
resolve("Done after 2 second");
// reject("2秒请求超时了");
}, 2000);
});
}
// async function waitForPromise() {
// const result = await returnPromise();
// console.log(result); // 打印 "Done after 1 second" 但需要等待1秒钟
// return "Finished waiting";
// }
async function waitForPromise() {
try {
const result = await returnPromise();
console.log(result); // 打印 "Done after 1 second" 但需要等待2秒钟
return result;
// return Promise.resolve("通过了"); 返回是为了下面res 能拿到返回值
// Promise.resolve("通过了");// res = undefined
} catch (error) {
console.log("reject不会走await");
// return Promise.reject(new Error("报错了"));
Promise.reject(new Error("报错了"));
}
}
// 相当于
// function waitForPromise() {
// // 函数前面不用加async
// return new Promise(async (resolve, reject) => {
// try {
// const result = await returnPromise();
// console.log(result);
// resolve("通过了");
// } catch (error) {
// console.log("reject不会走await");
// reject(new Error("报错了"));
// }
// });
// }
async function test() {
const res = await waitForPromise();
console.log("res拿到返回值", res);
// await waitForPromise();
console.log("会等待");
}
test();
</script>
</body>
</html>