求帮忙解释一下finally的实现代码?

这段代码我可以大致看懂:
就是then和catch都先执行一边callback

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 })
  );
};

但是有几个疑问:this.then(value,reason)我不是很理解,then里怎么有两个参数?另外这个this指向是啥?

阅读 197
评论
    3 个回答

    1、Promise.prototype.then 本来就是有两个参数,一个 onFulfilled 一个 onRejected 。估计你平时都是只写第一个参数,第二个参数不写、最后用 .catch() 捕获了。

    https://developer.mozilla.org...

    2、原型链方法 this 指向调用该原型链方法的实例对象。

    let p1 = new Promise(); /* 伪代码,仅做举例 */
    let p2 = new Promise(); 
    p1.finally(() => {}); /* this 即 p1 */
    p2.finally(() => {}); /* this 即 p2 */