この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。

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

以下は、 Promise.allSettled() を実装するコード例です。

Promise.allSettled = function(promises) {  return new Promise(function(resolve, reject) {    if (!Array.isArray(promises)) {      return reject(new TypeError('arguments must be an array'));    }    var resolvedPromises = [];    var resolvedCount = 0;    var promisesCount = promises.length;    var result = [];    promises.forEach(function(promise, index) {      Promise.resolve(promise).then(function(value) {        resolvedCount++;        resolvedPromises[index] = {          status: 'fulfilled',          value: value        };        if (resolvedCount === promisesCount) {          resolve(resolvedPromises);        }      }, function(reason) {        resolvedCount++;        resolvedPromises[index] = {          status: 'rejected',          reason: reason        };        if (resolvedCount === promisesCount) {          resolve(resolvedPromises);        }      })    });  });};

この実装では、 Promise.allSettled() は次のように動作します。

  • 引数に渡された promises 配列を反復処理して、それぞれのpromiseを解決/拒否する。
  • 解決/拒否されたpromiseを result 配列に格納し、 resolvedCount 変数に加算する。
  • resolvedCountpromisesCount に等しくなったときは(つまり、すべてのpromiseが解決/拒否されたときは)、 resolve 関数を呼び出して resolvedPromises 配列を解決する。
  • 正常に解決/拒否されなかったpromiseの場合は、配列の status プロパティが "fulfilled" または "rejected" に設定され、結果の値または理由が格納されます。

上記のコードは単一の引数のみを考慮していますが、 Promise.allSettled() は複数の引数を受け取ることができます。これは arguments が配列に変換されて使用されるためです。