使用 ES9 中的 Promise.prototype.then() 和 Promise.prototype.catch() 来处理 Promise 的结果

阅读时长 5 分钟读完

Promise 是异步编程中最重要的 API 之一,它可以将异步代码变得更加易读和清晰。在 ES9 中,Promise 增加了两个新的实例方法:Promise.prototype.then() 和 Promise.prototype.catch(),这些新的方法可以处理 Promise 的结果,并使代码更加简单和易于维护。

Promise.prototype.then()

Promise.prototype.then() 是一个回调函数,它在 Promise 对象解析时执行。Promise 对象在解决时会传递一个解析值,该值可用于处理结果。

正常情况下,如果 Promise 解决后没有任何问题,我们可以使用 then() 方法来处理结果。例如,假设我们有一个返回 Promise 的函数 fetchUserData():

这个函数将获取一个用户的 JSON 数据,并在成功时将数据记录到控制台。

现在,我们可以使用 then() 方法调用该函数,并将它的返回值分配给一个变量:

在上述示例代码中,我们首先调用 fetchUserData() 函数,它返回一个可解析的 Promise 对象。我们使用 then() 方法来处理解析之后的结果,将一条日志写入控制台告诉我们 fetchUserData() 函数的请求已经成功解析。

Promise.prototype.catch()

与 then() 方法不同,Promise.prototype.catch() 对象处理 Promise 的任何问题,包括解决和拒绝两种情况。使用 catch() 方法,我们可以在出现错误时处理 Promise。例如,以下代码:

在上述示例代码中,我们使用 catch() 方法来处理 Promise 在解析时发生的任何错误。如果发生错误,我们将在控制台中打印一条错误消息,告诉我们 fetchUserData() 函数的请求失败了。

在 Promise 中,我们经常使用 then() 和 catch() 方法来处理异步请求的结果。请注意,我们可以使用 Promise.prototype.finally() 方法在 Promise 运行完毕时执行一些代码,但它不接收任何参数并且不影响 Promise 的解析。

深入理解 Promise.prototype.then() 和 Promise.prototype.catch()

在处理 Promise 的解析和拒绝方面,我们可以将 then() 和 catch() 看作是对同一 Promise 的两个回调函数。这些回调函数可在 Promise 对象解析和拒绝时触发,并处理 Promise 对象传递的值。

  • then():当 Promise 解析时调用。
  • catch():当 Promise 拒绝时调用。

在处理 Promise 时,我们经常使用链式编程模式。Promise 会在链中传递并在每个 then() 方法中调用回调函数,直到遇到一个 catch() 方法处理 Promise 的问题。例如:

在上述代码示例中,我们使用 fetch() 函数从服务器中提取 JSON 数据。我们使用链式 then() 方法来处理数据,如果出现问题,则使用 catch() 方法来处理错误。如果 Promise 解析或拒绝,它将继续被传递,并在链中执行所有的回调函数。

Promise.prototype.then() 和 Promise.prototype.catch() 的示例代码

以下是 Promise.prototype.then() 和 Promise.prototype.catch() 的完整代码示例:

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

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

在上述代码示例中,我们使用 fetchUserData() 函数从服务器提取 JSON 数据。该函数返回一个 Promise 对象,我们在 then() 方法中处理解析之后的数据,在 catch() 方法中处理拒绝或解析期间出现的任何错误。

结论

使用 ES9 中的 Promise.prototype.then() 和 Promise.prototype.catch() 方法能够让我们更好地处理 Promise 的结果。我们可以使用 then() 方法来处理解析时传递的值,在 catch() 方法中处理拒绝和任何错误。在处理 Promise 时,我们通常会使用链式编程模式,以便将 Promise 对象传递到链中,直到找到一个 catch() 方法来处理问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d4d1da336082f254bd604

纠错
反馈