ES10 中的 async 函数如何识别并且处理 reject
在 ES10 中,async/await 已经成为了处理异步编程的标准方式。但是,在使用 async 函数时,我们需要注意如何识别和处理 reject,以避免程序出现异常。
async 函数和 Promise
在深入了解如何处理 reject 之前,我们需要先了解 async 函数和 Promise。
async 函数是一种特殊的函数,它返回一个 Promise 对象。在 async 函数中,我们可以使用 await 来等待一个 Promise 对象的完成。当我们使用 await 等待一个 Promise 对象时,async 函数会暂停执行,直到这个 Promise 对象完成。
Promise 对象是一种表示异步操作的方式。它有三种状态:pending(等待中)、fulfilled(已完成)和 rejected(已失败)。在 Promise 对象被创建时,它的状态是 pending。当异步操作完成时,Promise 对象的状态会变为 fulfilled 或 rejected。
如何识别 reject
在 async 函数中,我们可以使用 try/catch 语句来捕获 reject。如果 await 等待的 Promise 对象被 reject 了,它会抛出一个异常。我们可以使用 try/catch 语句来捕获这个异常,并对它进行处理。
下面是一个示例代码:
----- -------- ----------- - --- - ----- -------- - ----- ---------------------------------- ----- ---- - ----- ---------------- ------ ----- - ----- ------- - ---------------------- -------- ------- ------ ----- - -
在这个示例代码中,我们使用了 try/catch 语句来捕获可能出现的异常。如果 fetch 请求失败或 response.json() 抛出异常,我们就会捕获到这个异常,并在控制台中输出错误信息。
如何处理 reject
当我们捕获到一个 reject 时,我们可以对它进行处理。处理 reject 的方式有很多种,具体取决于我们的业务需求。
下面是一些处理 reject 的示例代码:
-- ----- ----- -------- ----------- - --- - ----- -------- - ----- ---------------------------------- ----- ---- - ----- ---------------- ------ ----- - ----- ------- - ---------------------- -------- ------- ------ ----- - - -- ------- ----- -------- ----------- - --- - ----- -------- - ----- ---------------------------------- -- -------------- - ----- --- ------------ --------- - ----- ---- - ----- ---------------- ------ ----- - ----- ------- - ---------------------- -------- ------- ------ ----- - - -- ---- ----- -------- ----------- - --- ------- - -- ----- -------- - -- - --- - ----- -------- - ----- ---------------------------------- ----- ---- - ----- ---------------- ------ ----- - ----- ------- - ---------------------- -------- ------- ---------- - - ------ ----- -
在这些示例代码中,我们分别使用了返回默认值、抛出自定义异常和重试操作等方式来处理 reject。
总结
在使用 async 函数时,我们需要注意如何识别和处理 reject。通过使用 try/catch 语句来捕获异常,我们可以对异常进行处理,以避免程序出现异常。处理 reject 的方式有很多种,具体取决于我们的业务需求。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65f836f4d10417a2223b1a9d