finally方法是ES2018的新特性
finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作,执行then()和catch()后,都会执行finally指定的回调函数。
使用场景:
比如一个方法在then()和catch()里回调都需要写,那么这个时候只需要在finally()方法里面实现就可以了
使用示例:
this.$ajax(_url, _params)
.then(() => {
})
.catch(() => {
})
.finally(() => {
// 你的代码
});
实现方法
目前es6,es5还未支持。可以通过下面两种方式实现
方式1:借助promise.prototype.finally包
npm install promise-prototype-finally
const promiseFinally = require('promise.prototype.finally');
// 向 Promise.prototype 增加 finally()
promiseFinally.shim();
// 之后就可以按照上面的使用方法使用了
方式2:手动实现finally()
阮老师详解
Promise.prototype.finally = function (callback) {
let P = this.constructor;
return this.then(
value => P.resolve(callback()).then(() => value),
reason => P.resolve(callback()).then(() => { throw reason })
);
};