以下为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() 方法。