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

BFE.devでのAI解答例 - JavaScript コーディング問題
29. async helper - `sequence()`を実装する

解答例:

まず、sequence()関数を実装します。渡されたAsyncFuncの配列をループし、1つのAsyncFuncにまとめます。まとめられたAsyncFunc内部で、各AsyncFuncは次のAsyncFuncを呼び出します。最後のAsyncFuncでは、最終的な結果(またはエラー)をcallbackに渡します。

const sequence = (funcs) => {
  return (callback, data) => {
    let current = 0;
    const next = (error, newData) => {
      if (error) {
        callback(error);
      } else {
        current++;
        if (current < funcs.length) {
          funcs[current](next, newData);
        } else {
          callback(null, newData);
        }
      }
    };
    funcs[current](next, data);
  };
};

それでは、以下のようにして掛け算のAsyncFuncを作成して、sequence()で繋ぎ合わせてみましょう。

const asyncTimes2 = (callback, num) => {
  setTimeout(() => callback(null, num * 2), 100);
};

const asyncTimes4 = sequence([asyncTimes2, asyncTimes2]);
const asyncTimes8 = sequence([asyncTimes4, asyncTimes2]);

asyncTimes4((error, data) => {
  console.log(data); // 4
}, 1);

asyncTimes8((error, data) => {
  console.log(data); // 8
}, 1);

sequence()関数が正しく機能していることに注意してください。asyncTimes8()に渡された掛ける2のAsyncFuncは、2回の連続呼び出しがあるため、最終結果は8になります。