0

这段代码我可以大致看懂:
就是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指向是啥?

12月3日提问
3 个回答
0

已采纳

then 本来就是两个参数,then(onFullfilled, onRejected)

使用 X.finally(....) 调用得时候,this 指向 X

0

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 */
0

标准的Promise.peototype.then本来就是两个参数,第一个是成功的回调,第二个是失败的回调,参见:MDN文档:Promise的“描述”一节;
Promise构造函数不能单独调用,必须用new操作符生成实例,该实例会继承Promise.prototype上的方法,当实例调用这些时,方法中的 this都指向此实例,参见:MDN文档:new 操作符的“描述”一节。

撰写答案

推广链接