promise对象的finally函数为什么要这样写

以下原版


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;

     });

 };


慕村225694
浏览 632回答 1
1回答

智慧大石

首先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操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript