第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

promise對象的finally函數為什么要這樣寫

promise對象的finally函數為什么要這樣寫

慕村225694 2018-12-20 18:15:07
以下原版Promise.prototype.finally = function (callback) {      let P = this.constructor;     return this.then(function(value) {         P.resolve(callback()).then(function(){             return value;         });     },      function (reson) {         P.resolve(callback()).then(function() {             throw reason;         });     }); };為什么不能這樣寫Promise.prototype.finally = function (callback) {      let P = this.constructor;     return this.then(function(value) {         callback();         return value;     },      function (reson) {         callback();         throw reason;     }); };
查看完整描述

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操作。


查看完整回答
反對 回復 2019-01-27
  • 1 回答
  • 0 關注
  • 658 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號