async返回的是promise

41 阅读1分钟

主题:theme: serene-rose

async 函数:

  1. async 是一个关键字,用于声明一个函数是异步的。
  2. async 函数总是返回一个 Promise。
  3. 如果 async 函数的返回值不是一个 Promise,它将自动被包装为一个已解析的 Promise。
  4. 在 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>