Promise 中 then 和 catch 方法参数的使用技巧

阅读时长 5 分钟读完

Promise 在前端开发中被广泛应用,通过 Promise 帮助我们处理异步操作,避免回调陷阱和层层嵌套。then 和 catch 方法是 Promise 的两个常用方法,本文将从具体应用和实际效果出发,深入解读 then 和 catch 方法的参数使用技巧,以提高代码质量和开发效率。

then 方法参数

then 方法的参数有两个:一个是成功状态的回调函数,一个是失败状态的回调函数。在 then 方法执行的过程中,会根据 Promise 的当前状态来执行相应的回调函数。正确的 then 方法的使用技巧可以使代码的可维护性、可读性、可测试性得到提升。

成功状态回调函数

成功状态回调函数是 then 方法的第一个参数,一般来说,后续的操作都在这个回调函数中进行。其参数即为 Promise 所 resolve 的值,可以根据该值来完成后续的操作。

在 fetchUserData 函数中,我们通过 fetch 方法向服务端发送请求,成功后将接口返回的 JSON 数据作为当前 Promise 的 resolve 值,并进入下一个 then 操作。在 then 操作中,我们打印出日志以便调试,并进行下一步数据处理。

失败状态回调函数

失败状态回调函数是 then 方法的第二个参数,在 Promise 的状态变为 reject 时执行。在使用 then 方法的时候,没有传入失败状态回调函数,Promise 异常会被传递到下一个 catch 方法中,通常用于对异常的统一处理。

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

在 fetchUserData 函数中,我们添加了失败状态回调函数,用于捕获并处理接口请求失败的异常。如果请求失败,将打印具体的错误信息,并执行处理失败的流程。

catch 方法参数

catch 方法是 Promise 原型链上的方法,它用于处理 Promise 执行产生的 reject,接收参数即为 reject 的原因(Error 类型)。catch 方法有一个最大的优点:能够处理直接抛出异常的函数。

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

在 fetchUserData 函数中,我们通过 throw 来模拟抛出一个未知异常。在 catch 方法中,我们将无差别地捕获所有的异常,并进行相应的处理。

抛错

then 方法和 catch 方法都会返回一个新的 Promise 对象。如果回调函数中抛出了任何异常,后续的 catch 方法会捕获到该异常,并将 Promise 状态变为 reject。

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

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

在 fetchData 函数中,我们首先通过 fetch 方法异步请求 API,然后将响应体转化为 JSON 数据,并判断数据是否为空。如果数据为空,则抛出 No data! 的异常。在 catch 方法中,我们捕获并打印异常,并向调用者 rethrow 异常。在调用 fetchData 的 then 方法时,我们接收到 fetchData 返回的 Promise,然而其状态为 reject,进入下一个 catch 操作,并打印异常日志。

结论

综上,then 方法和 catch 方法是 Promise 的常用方法之一,正确的使用方式可提高代码质量、可维护性和可读性。根据实际业务需求来选择适合的回调函数,可以让代码逻辑更加清晰。在项目开发时,不妨尝试从不同的角度出发,不断探究和引入更多的 JavaScript 技巧,来优化编码流程和提高开发效率。

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

纠错
反馈