认识finally方法
finally()
方法用于指定不管Promise
对象最后状态如何,都会执行的操作。该方法是ES2018
引入标准的。
promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
- 上面代码中,不管
promise
最后的状态,在执行完then
或catch
指定的回调函数以后,都会执行finally
方法指定的回调函数。 finally
方法的回调函数不接受任何参数,这意味着没有办法知道,前面的Promise
状态到底是fulfilled
还是rejected
。这表明,finally
方法里面的操作,应该是与状态无关的,不依赖于Promise
的执行结果。
实现
finally
本质上是then
方法的特例。
promise
.finally(() => {
// 语句
});
// 等同于
promise
.then(
result => {
// 语句
return result;
},
error => {
// 语句
throw error;
}
);
上面代码中,如果不使用finally
方法,同样的语句需要为成功和失败两种情况各写一次。有了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 })
);
};
上面代码中,不管前面的 Promise
是fulfilled
还是rejected
,都会执行回调函数callback
。