この解答例は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になります。