在 JavaScript 的异步编程中,Promise 是非常常用的一种技术,它使我们能够避免回调嵌套地狱,使异步代码更易于理解和管理。在 ES9 中,Promise 对象得到了一个新的实例方法:finally()
。
finally()
方法
finally()
方法接收一个回调函数作为参数,无论 Promise 对象的状态最终是成功或失败,该回调函数都将被执行。如果 Promise 对象最终被解决(即进入 fulfilled 或 rejected 状态),finally()
方法都将返回原始的 Promise 对象,而不会修改其状态或值。
这个方法主要用于在 Promise 对象的最终状态确定后,需要执行一些清理操作的情况。例如,关闭文件或数据库连接,释放资源,清除定时器等。在此之前,从 Promise 对象的解决路径和拒绝路径中选择一个执行回调函数。在确定 Promise 对象的最终状态之前不知道哪一个路径加最终表现。
---------- -------------- -- ---------------- ---------- -- ------------------ ------------ -- --------------------- ----------- -- ------------------------- ------------
在上面的例子中,使用 fetch()
方法获取数据,并在成功返回时通过 JSON.parse()
方法解析数据。如果请求失败,则写入控制台错误。在 Promise 被成功解决或拒绝后,finally()
方法都将在 Promise 对象执行结束前打印一条日志,用于清理任何未关闭的资源。无论 Promise 对象是成功还是失败,这条日志都会被打印出来。
指导意义
finally()
方法直接从 Promise 的拒绝路径或解决路径中返回 Promise 对象,因此可以使 Promise 代码更清晰、更易于阅读和理解。有了它,我们不必在 then()
方法中写入相同的代码,就可以在 Promise 的最终状态确认之前,维护和释放一些资源。
此外,在使用 try … catch
语句时,finally()
方法也可以用于在代码块中清理资源,与 try … catch
语句的结构很相似,可以更方便地管理资源。
结论
finally()
方法是一个简单但非常有用的新增特性,能够在异步编程中使代码更加健壮,更易于管理和维护。它可以用于清理资源,通过 try … catch
语句来进行类似的操作,可以解决一些常见的异步编程问题。
示例代码
--- ------- - --- ----------------- ------- -- - ------------- -- - ------------------- -- ------ --- ------- ------------ -- - ------ ------- -- -------- -- - --------------- -- ----------- -- - -------------------- -------- ---
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671629f4ad1e889fe21b26f8