Promise 是 ES6 引入的一种用来处理异步操作的新特性,可以帮助我们更优雅地处理异步操作,并且可以避免回调地狱的问题。Promise 具体实现了状态机的概念,它有三种状态:pending
、fulfilled
和 rejected
。
在 Promise 的使用中,经常需要在操作完成后执行一些代码,无论是正常完成还是出错。而在 ES6 中,我们可以使用 Promise.finally()
这个新特性来实现。
Promise.finally() 是什么?
Promise.finally()
是一个新的实例方法,可以在 Promise 执行完之后执行回调函数,无论是成功还是失败。它可以用来执行一些收尾工作,比如关闭文件、断开数据库连接等。
Promise.finally() 的语法和用法
Promise.finally()
与 Promise.then()
类似,都是返回一个新的 Promise 对象。但与 Promise.then()
不同的是,Promise.finally()
不管 Promise 对象的状态如何都会执行回调函数。
promise .then(result => {}) .catch(error => {}) .finally(() => {});
例如,在 Promise 执行完毕后,我们需要执行清理任务。无论 Promise 是否成功或失败,我们都需要保证这个清理任务执行。这时,就可以使用 Promise.finally()
:
fetch('https://example.com') .then(response => response.json()) .catch(error => console.error('请求出错:', error)) .finally(() => { console.log('请求结束'); });
Promise.finally() 示例代码
下面是一个 Promise.finally() 的使用示例:
fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => response.json()) .then(json => console.log('成功获取数据', json)) .catch(error => console.error('请求出错:', error.message)) .finally(() => { console.log('请求结束'); });
在以上示例中,fetch()
函数返回一个 Promise 对象,我们通过 .then()
方法获取到响应数据,并在控制台输出。如果出错,我们会捕获到异常并输出错误信息。而使用 Promise.finally()
则可以保证请求结束之后都会执行结束操作,无论正常执行还是异常执行。
总结
Promise.finally() 是 ES6 新增的一个实例方法,用于在 Promise 结束时执行回调函数。它可以帮助我们更好地处理异步操作,避免回调地狱的问题。在使用中要注意,finally()
返回值不会影响 Promise 链的状态,即不会修改前面 then()
或 catch()
的返回结果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646a0b4d968c7c53b09ccf57