在 ES9 中,Promise 对象新增了一个方法 finally()
,它允许你在 Promise 结束时,无论是 resolve 还是 reject,都执行一段代码。这个方法非常有用,特别是在需要清理资源或者需要在 Promise 结束时执行一些必要的操作时。
本文将介绍 finally()
的用法,并提供一些示例和注意事项,帮助你更好地理解该方法。
使用示例
finally()
方法接受一个回调函数作为参数,该回调函数在 Promise 结束时执行。这个回调函数不接受任何参数,也不会修改 Promise 的状态,它只是在 Promise 结束时执行一些操作。
下面是一个简单的示例,演示了如何使用 finally()
方法:
function fetchData() { return fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => response.json()) .finally(() => console.log('fetchData() finished')); } fetchData().then(data => console.log(data));
在上面的示例中,我们使用 fetch()
方法获取 JSON 数据,并将其解析为 JavaScript 对象。在 Promise 结束时,我们在控制台输出一条消息,表示 fetchData()
方法已经完成。最后,我们打印出获取的数据。
注意事项
在使用 finally()
方法时,需要注意以下几点:
1. finally()
不会改变 Promise 的状态
finally()
方法不会改变 Promise 的状态,也不会影响 Promise 的返回值。它只是在 Promise 结束时执行一些操作。
2. finally()
的返回值会被忽略
finally()
方法的返回值会被忽略,它只是在 Promise 结束时执行一些操作。如果你需要在 Promise 结束时返回一个新的 Promise,可以在 finally()
方法中返回一个新的 Promise 对象。
3. finally()
方法可以链式调用
finally()
方法可以链式调用,它返回一个新的 Promise 对象,可以继续调用 Promise 的其他方法。
下面是一个示例,演示了如何链式调用 finally()
方法:
-- -------------------- ---- ------- -------- ----------- - ------ ----------------------------------------------------- -------------- -- ---------------- ----------- -- ------------------------ ----------- ---------- -- ------------------ ------------ -- ---------------------- - ------------
在上面的示例中,我们在 finally()
方法后面调用了 then()
和 catch()
方法,以处理 Promise 的结果和错误。
结论
finally()
方法是一个非常有用的方法,它允许你在 Promise 结束时执行一些必要的操作。在使用 finally()
方法时,需要注意它不会改变 Promise 的状态,也不会影响 Promise 的返回值。如果你需要在 Promise 结束时返回一个新的 Promise,可以在 finally()
方法中返回一个新的 Promise 对象。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67699e6f98e3e1ab1a940726