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鏈的最后一環(huán),相對而言,其實done才是。
因為finally可能之后還有then和catch等等,所以其必須要返回一個promise對象。
至于finally為何并不是promise的最后一環(huán),我個人理解是在最開始討論這個方法時候,是將其作為一段promise操作的結尾,例如多個繼發(fā)的請求,在每個請求的最后進行finally操作。
添加回答
舉報