在ES9中,Promise对象新增了finally方法,该方法可以在Promise执行完毕后,无论是resolve还是reject,都会执行finally中的回调函数。
Promise的基本用法
在了解Promise.prototype.finally方法之前,我们先来回顾一下Promise的基本用法。
Promise是一种异步编程的解决方案,它可以将异步操作转换为同步操作的写法,使得代码更加简洁易懂。Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),一旦状态发生改变,就不会再变。
我们可以使用Promise构造函数来创建一个Promise对象,该对象接收一个函数作为参数,在该函数中进行异步操作,并在异步操作完成后调用resolve或reject方法来改变Promise的状态。
// www.javascriptcn.com code example
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
resolve('success');
}, 1000);
});
promise.then(res => {
console.log(res); // success
}).catch(err => {
console.log(err);
});Promise.prototype.finally方法的用法
在ES9中,Promise对象新增了finally方法,该方法可以在Promise执行完毕后,无论是resolve还是reject,都会执行finally中的回调函数。
finally方法接收一个回调函数作为参数,该回调函数会在Promise执行完毕后被调用。如果Promise对象的状态是fulfilled,则该回调函数的参数为resolve的值;如果Promise对象的状态是rejected,则该回调函数的参数为reject的原因。如果finally方法返回一个Promise对象,则会等待该Promise对象执行完毕后再继续执行后续操作。
// www.javascriptcn.com code example
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
resolve('success');
}, 1000);
});
promise.then(res => {
console.log(res); // success
}).catch(err => {
console.log(err);
}).finally(() => {
console.log('finally');
});运行结果为:
success finally
无论Promise对象的状态是fulfilled还是rejected,finally中的回调函数都会被执行。
finally方法的指导意义
Promise.prototype.finally方法的出现,使得我们在处理异步操作时更加方便。在finally中,我们可以进行一些清理工作,比如关闭文件、释放资源等,这样可以避免出现内存泄漏等问题。
同时,finally方法的返回值也非常有用。在finally方法中,我们可以返回一个Promise对象,该对象可以用来控制异步操作的执行顺序。比如,我们可以在finally方法中返回一个Promise对象,然后在该对象的then方法中执行后续操作,这样可以保证后续操作在异步操作执行完毕后再执行。
// www.javascriptcn.com code example
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
resolve('success');
}, 1000);
});
promise.then(res => {
console.log(res); // success
}).catch(err => {
console.log(err);
}).finally(() => {
console.log('finally');
return new Promise(resolve => {
setTimeout(() => {
resolve('done');
}, 1000);
});
}).then(res => {
console.log(res); // done
});运行结果为:
success finally done
结语
Promise.prototype.finally方法的出现,使得我们在处理异步操作时更加方便。在finally中,我们可以进行一些清理工作,并且可以返回一个Promise对象,用来控制异步操作的执行顺序。同时,finally方法的出现也反映了JavaScript语言的不断发展和进步,我们需要不断地学习和掌握新的技术,以便更好地开发出高质量的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d19153a941bf713434b2d6