推荐答案
Promise.prototype.finally 是 ECMAScript 2018 引入的一个方法,它允许你在 Promise 无论成功还是失败后都执行一段代码。这个方法返回一个新的 Promise,并且不会改变原 Promise 的状态。
// www.javascriptcn.com code example
promise
.then(result => {
// 处理成功的情况
})
.catch(error => {
// 处理失败的情况
})
.finally(() => {
// 无论成功或失败都会执行的代码
});本题详细解读
1. finally 方法的作用
finally 方法的主要作用是在 Promise 链的末尾添加一个回调函数,无论 Promise 是成功(fulfilled)还是失败(rejected),这个回调函数都会被执行。这使得你可以在 Promise 链的最后执行一些清理操作,比如关闭加载动画、释放资源等。
2. finally 方法的返回值
finally 方法返回一个新的 Promise,这个 Promise 的状态与原 Promise 的状态相同。也就是说,如果原 Promise 成功,finally 返回的 Promise 也会成功;如果原 Promise 失败,finally 返回的 Promise 也会失败。
// www.javascriptcn.com code example
const promise = new Promise((resolve, reject) => {
resolve('Success');
});
promise
.finally(() => {
console.log('Finally executed');
})
.then(result => {
console.log(result); // 输出: Success
});3. finally 方法的参数
finally 方法接受一个回调函数作为参数,这个回调函数不接受任何参数。这意味着你不能在 finally 中访问 Promise 的结果或错误信息。
promise
.finally(() => {
console.log('This will run no matter what');
});4. finally 方法的典型使用场景
finally 方法通常用于执行一些无论 Promise 成功还是失败都需要执行的操作。例如:
- 关闭加载动画
- 释放资源
- 清理临时数据
fetch('https://api.example.com/data')
.then(response => response.json())
.catch(error => {
console.error('Error:', error);
})
.finally(() => {
console.log('Request completed');
});在这个例子中,无论请求成功还是失败,finally 中的代码都会执行,确保请求完成后进行必要的清理操作。