ES9 中新增了 Promise 的 finally 方法,它可以在 Promise 完成后无论是成功还是失败都会执行一段代码,类似于 try-catch-finally 中的 finally。
finally 方法的语法如下:
promise.finally(onFinally)
其中,onFinally 是一个函数,它会在 Promise 完成后执行。如果 Promise 成功,则执行 onFinally 函数并返回 Promise 对象,如果 onFinally 函数返回一个 Promise 对象,则会等待该 Promise 对象完成后再返回。如果 Promise 失败,则也会执行 onFinally 函数并返回 Promise 对象,但是该 Promise 对象会继续抛出原来的错误。
下面是一个简单的例子:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ------------------ -- ------ --- ------- ------------ -- - -------------------- -- ------------ -- - --------------------- -- ----------- -- - ----------------------- ---
在这个例子中,Promise 在 1 秒后会返回一个结果,然后会执行 then 方法。如果 then 方法成功执行,则会输出 result。如果 then 方法执行失败,则会执行 catch 方法,并输出错误信息。无论是成功还是失败,都会执行 finally 方法,并输出 finally。
需要注意的是,finally 方法返回的是一个新的 Promise 对象,它的状态和原来的 Promise 对象状态相同,如果原来的 Promise 对象被 reject,则 finally 返回的 Promise 对象也会被 reject。
finally 方法的作用在于无论 Promise 成功还是失败都需要执行一些清理操作,例如关闭文件或网络连接等。它也可以用于实现类似于 try-catch-finally 的逻辑,例如:
-- -------------------- ---- ------- -------- ----------- - ------ --------------------------------- -------------- -- - -- -------------- - ----- --- -------------- -------- --- --- ----- - ------ ---------------- -- ----------- -- - ---------------------- ------------ --- -
在这个例子中,fetchData 函数会发送一个网络请求,如果请求成功,则返回一个 Promise 对象并解析 JSON 数据。如果请求失败,则抛出一个错误。不管请求是否成功,都会执行 finally 方法并输出 fetchData completed。
总结一下,ES9 中新增的 Promise 的 finally 方法可以在 Promise 完成后无论是成功还是失败都执行一段代码,它的作用在于清理操作和实现类似于 try-catch-finally 的逻辑。需要注意的是,finally 方法返回的是一个新的 Promise 对象,它的状态和原来的 Promise 对象状态相同。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65df949e1886fbafa4cbe340