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