以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
123. 实现 Promise.prototype.finally()

实现 Promise.prototype.finally() 可以通过在 Promise 原型上添加一个方法来实现。该方法接收一个回调函数作为参数,并在 Promise 结束时执行该回调函数。

具体实现可以参考以下代码:

Promise.prototype.finally = function (callback) {
  const P = this.constructor;
  // 保证回调函数一定会执行
  return this.then(
    // 在 Promise 结束后执行回调函数
    (value) => P.resolve(callback()).then(() => value),
    (reason) =>
      P.resolve(callback()).then(() => {
        // 捕获异常并返回原因
        throw reason;
      })
  );
};

该实现中,我们先定义一个新的 Promise 对象 P,用来封装回调函数的执行结果。然后通过 this.then() 调用链,在 then() 方法中执行回调函数。特别的,在第一个函数参数中,在回调函数执行完成后再执行 P.resolve() 来返回原始 Promise 对象,并传递执行结果。在第二个函数参数中,我们依然是先执行回调函数,但是在 P.resolve() 方法返回之后,我们需要将原因抛出以保持 Promise 错误的连续传播。

这样,我们就实现了 Promise.prototype.finally() 方法。