ES10 中的新特性:Promise.prototype.finally() 的实战应用

阅读时长 4 分钟读完

ES10 中的新特性:Promise.prototype.finally() 的实战应用

在前端开发中,异步操作是不可避免的。而 Promise 对象,是一种用于处理异步操作的标准化解决方案,其可以优雅地处理异步回调地狱问题。在 ES10 中,Promise 对象新增了一个实用的方法:Promise.prototype.finally(),本文将介绍其用法及实战应用。

Promise.prototype.finally() 方法

Promise.prototype.finally() 方法返回一个新的 Promise 对象,该对象在 Promise 对象状态改变后(无论是 resolve 还是 reject),都会执行指定的回调函数。该方法带有一个函数参数,该函数会在 Promise 对象已经 settled(即变成fulfilled 或 rejected)后被调用。该方法主要用于无论 promise 被 reject 还是 resolve 都要执行的任务。

Promise.prototype.finally(onFinally)

参数:onFinally 是当 Promise 对象 settle 时要调用的函数。

返回值:返回一个新的 Promise 对象。

实战应用

下面我们将以实际应用中常见的场景为例,来介绍 Promise.prototype.finally() 的使用方法。

场景:Ajax 请求数据时,在请求的过程中需要显示一个加载中的提示,请求完成后需要隐藏该提示。

传统方法:

我们可以定义一个 showLoading 和 hideLoading 方法,用于显示和隐藏加载提示:

然后在请求的过程中,则需要手动调用这两个方法:

-- -------------------- ---- -------
--------------
-------------
--------------------- 
  -- ------ 
--
----------------------- 
  -- ------ 
--
------------------- 
 -------------- 
---
展开代码

可以看到,在 Promise 对象中使用传统的方式,代码会变得很冗长。而使用 Promise.prototype.finally() 方法,可以有效地简化代码,实现如下:

-- -------------------- ---- -------
--------------
-------------
  -------------------- - 
    -- ------ 
  --
  ----------------------- - 
    -- ------ 
  --
  ------------------- - 
    -------------- 
  ---
展开代码

可以看到,使用 Promise.prototype.finally() 方法可以简化代码,更加优雅。

还有一个实际应用的例子是对请求时的状态进行更详细的输出,例如,前端请求数据时,需要打印请求参数,请求地址以及请求响应结果。这时,可以使用 Promise.prototype.finally() 方法来实现这一需求:

-- -------------------- ---- -------
-------- ------------- ------- -
 ------------------------- -----------------
 --------------
 ---------- -------
 -------------- -- ----------------
 ---------- -- -
   ------------------------- ------
   -- --------
 --
 ------------ -- -
   -------------------------- -------
   -- ------
 --
 ----------- -- -
   --------------
 ---
-
展开代码

在这里我们通过 console.log 输出了请求地址和参数,并在请求成功和失败时分别输出了响应和错误信息。

总结

在实际开发中,Promise 对象是不可避免的,而 Promise.prototype.finally() 方法的出现,旨在帮助开发者更加优雅地处理一些无论 resolve 还是 reject 时都需要执行的任务。在本文中,我们通过实际场景的演示,掌握了 Promise.prototype.finally() 方法的使用,希望能对前端开发者有所帮助。

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

纠错
反馈

纠错反馈