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