ES9 中 Promise.prototype 的 finally 详解

阅读时长 3 分钟读完

ES9 中引入了新的方法 Promise.prototype.finally,该方法是一个语法糖,用于在一个 Promise 链式调用中,无论 Promise 对象的状态如何都会执行一段代码。

简介

finally 方法能够在 Promise 对象无论是 fulfilled 还是 rejected 状态都会执行一段代码,不管 Promise 成功还是失败、抛出异常还是返回值,finally 方法都会最后被调用,常常被用作清理资源、释放内存等操作。

语法:promise.finally(onFinally)

参数:onFinally 是一个回调函数。

返回值:一个新的 Promise 对象,状态为原 Promise 对象的状态。

示例代码

下面是一个简单的示例代码,使用 finally 方法实现打印语句的操作:

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

上面的代码中,在 sendData 函数返回的 Promise 对象上链式调用了 thenfinally 方法。当 Promise 对象状态变为 fulfilled 时,then 方法中的回调函数会被调用并打印出 'Result: success' 的信息,最后 finally 中的回调函数被调用并打印出 'Cleanup' 的信息。

当 Promise 对象状态变为 rejected 时,then 方法中的回调函数不会被调用,不会产生 'Result: success' 的信息,但 finally 中的回调函数仍会被调用并打印出 'Cleanup' 的信息。

注意事项

finally 方法不会修改 Promise 对象原来的状态和值,它返回的是一个新的 Promise 对象,状态和值由原 Promise 对象决定。

需要注意的是,finally 方法中的回调函数不接收任何参数,也不能改变 Promise 对象的状态和值,如果回调函数中抛出了异常,则会影响整个 Promise 链式调用。

总结

ES9 中的 finally 方法是一种确保在 Promise 链式调用中无论 Promise 对象的状态如何都会执行的操作,它能够在 Promise 成功或失败时执行一些操作,是一种非常有用的语法糖。使用它可以简化 Promise 的代码,并且可以在 Promise 成功或失败后执行一些清理操作,例如释放资源、关闭连接等。

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

纠错
反馈