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