async 函数和普通函数的区别是什么?

推荐答案

  • 返回值async 函数总是返回一个 Promise 对象,即使函数内部返回的是一个非 Promise 值,它也会被自动包装成一个 Promise。而普通函数则直接返回函数体内的返回值。
  • 执行方式async 函数内部可以使用 await 关键字来暂停函数的执行,直到 await 后面的 Promise 完成。普通函数则按照同步顺序执行,无法暂停。
  • 错误处理async 函数可以通过 try/catch 来捕获 await 表达式中可能抛出的错误。普通函数则需要手动处理错误,或者通过回调函数传递错误。
  • 调用方式async 函数可以通过 await.then() 来调用,而普通函数只能直接调用。

本题详细解读

1. 返回值

async 函数的返回值始终是一个 Promise 对象。即使你在 async 函数中返回了一个非 Promise 的值,JavaScript 引擎也会自动将其包装成一个 Promise。例如:

而普通函数的返回值则直接是函数体内的返回值:

2. 执行方式

async 函数内部可以使用 await 关键字来暂停函数的执行,直到 await 后面的 Promise 完成。这使得 async 函数可以以同步的方式编写异步代码。例如:

而普通函数则按照同步顺序执行,无法暂停:

3. 错误处理

async 函数可以通过 try/catch 来捕获 await 表达式中可能抛出的错误:

-- -------------------- ---- -------
----- -------- ----------- -
  --- -
    ----- -------- - ----- --------------------------------------
    ----- ---- - ----- ----------------
    ------ -----
  - ----- ------- -
    ----------------------- -------
  -
-

而普通函数则需要手动处理错误,或者通过回调函数传递错误:

4. 调用方式

async 函数可以通过 await.then() 来调用:

-- -------------------- ---- -------
----- -------- ----- -
  ------ ---
-

-- -- ----- --
------ ---------- -
  ----- ------ - ----- ------
  -------------------- -- -- --
-----

-- -- ------- --
----------------- -- --------------------- -- -- --

而普通函数只能直接调用:

纠错
反馈