Promise.prototype.finally() 方法是 ECMAScript 2017 新增的方法,它可以被应用于 promise 实例,以在 promise 被 resolved 或 rejected 时做一些必要的清除或处理操作。在本文中,我们将深入探讨这个方法的语法、行为和使用场景,并提供相应的示例代码和实际应用建议。
语法
Promise.prototype.finally() 方法的语法如下:
--------------------------
其中,promise
代表需要应用这个方法的 promise 实例,onFinally
是一个回调函数,当 promise 被 resolved 或 rejected 时都会调用该函数。onFinally
函数的返回值不会影响 promise 实例本身的状态,也就是说,它不会像 then()
和 catch()
方法那样返回新的 promise 实例。
行为
Promise.prototype.finally() 方法只有在 promise 被 resolved 或 rejected 时才会被调用,其行为类似于 try-catch-finally 语句中的 finally 子句。这意味着在 promise 被 resolved 或 rejected 前,onFinally
函数不会被执行;而在 promise 被 resolved 或 rejected 后,无论 onFinally
函数的执行结果如何,都不会影响 promise 实例的状态。
如果 onFinally
函数抛出异常,该异常只会被记录在控制台上,不会影响 promise 实例本身的状态。这意味着,即使 onFinally
函数执行失败,promise 实例的状态也不会变为 rejected。
使用场景
Promise.prototype.finally() 方法通常用于在 promise 被 resolved 或 rejected 后进行一些必要的清理操作,例如关闭连接、释放资源、清除计时器等。如果使用 then()
和 catch()
方法来实现这些操作,可能会出现代码重复或忘记清理的问题。
下面是一个 fetch()
方法的示例,演示了如何使用 Promise.prototype.finally() 方法来关闭连接和显示加载状态:
-------- -------------- - ----- ------ - --------------------------------- ---------------- - ------------ ------ ---------- -------------- -- - -- -------------- - ----- --- -------------- -------- --- --- ---- - ------ --------------- -- ----------- -- - ---------------- - -- ----------------------- -------- -- -
在这个示例中,我们使用 fetch()
方法获取数据,并在开始请求时显示加载状态,结束时关闭连接和清除状态。这个示例还使用了 throw
语句来处理网络请求错误,并在 promise 被 resolved 或 rejected 时关闭连接。
注意事项
虽然 Promise.prototype.finally() 方法很方便,但我们还是需要注意一些事项来确保代码的健壮性和可读性:
finally()
方法不会创建新的 promise 实例,因此无法像then()
和catch()
方法那样返回新的 promise 实例。如果需要返回新的 promise 实例,请在finally
之前调用then()
或catch()
方法。finally()
方法不接受参数,并且无法修改 promise 实例的状态。如果需要修改状态,请使用resolve()
或reject()
方法。finally()
方法仅在 promise 被 resolved 或 rejected 时才会被调用。如果需要在 promise 被 pending 时执行某些操作,请考虑使用then()
或catch()
方法。finally()
方法只是一个语法糖,它可以用其他方式来实现相同的效果。如果你觉得使用finally()
方法造成了代码混乱或难以维护,请考虑其他实现方法。
结论
Promise.prototype.finally() 方法是 ECMAScript 2017 新增的方法,它可以被应用于 promise 实例,以在 promise 被 resolved 或 rejected 时做一些必要的清除或处理操作。 在本文中,我们深入探讨了该方法的语法、行为和使用场景,并提供了相应的示例代码和实际应用建议。我们希望读者能够理解并掌握该方法的使用方法,以增强代码质量和可读性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67395f59317fbffedf16765b