この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
123. Promise.prototype.finally() を実装する

以下は、Promise.prototype.finally()を実装したコードです。

Promise.prototype.finally = function(callback) {
  return this.then(
    // onFulfilled、onRejectedともにcallbackを実行し、結果をそのまま返却する
    value  => Promise.resolve(callback()).then(() => value),
    reason => Promise.resolve(callback()).then(() => { throw reason })
  );
};

このコードでは、Promise.prototype.finally()メソッドを定義しています。このメソッドは、Promiseオブジェクトに対して使用できるようにし、引数としてcallback関数を受け取ります。

このメソッドは、then()メソッドを利用して、プロミスがfulfilledまたはrejectedされた場合に引数のcallback関数を実行するようにしています。そして、callback関数自体は、返す値がなく、promiseのsettleされた値には影響を与えないようにしています。

以下は、このPromise.prototype.finally()メソッドを使用したサンプルコードです。

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功!');
  }, 1000);
});

promise
  .then(value => {
    console.log(value);
    return '変更された値';
  })
  .finally(() => {
    console.log('finallyメソッドが実行されました');
  })
  .then(value => {
    console.log(value);
  });

このコードでは、Promiseオブジェクトを作成し、1秒後にresolveメソッドを呼び出しています。そして、その後に、then()メソッドでコールバック関数を実行し、"変更された値"を返すようにしています。さらに、finally()メソッドで、コールバック関数を実行しています。ここで、console.log()メソッドを使用して、「finallyメソッドが実行されました」というメッセージを表示しています。そして、最後に再びthen()メソッドでコールバック関数を実行し、"変更された値"が表示されることを確認しています。