1 回答
TA贡献1946条经验 获得超3个赞
首先function (reson) {这里有点小错误,应该是reason.
然后,原版的代码也不是这样的吧。
这个是ES6语法下的。
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 })
);
};
这个是转换为ES5之后的。
Promise.prototype.finally = function (callback) {
var P = this.constructor;
return this.then(function (value) {
return P.resolve(callback()).then(function () {
return value;
});
}, function (reason) {
return P.resolve(callback()).then(function () {
throw reason;
});
});
};
要这么写的原因是在于,finally其实并不一定是这个promise链的最后一环,相对而言,其实done才是。
因为finally可能之后还有then和catch等等,所以其必须要返回一个promise对象。
至于finally为何并不是promise的最后一环,我个人理解是在最开始讨论这个方法时候,是将其作为一段promise操作的结尾,例如多个继发的请求,在每个请求的最后进行finally操作。
添加回答
举报