この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
56. ページネーションのつくAPIを叩く
以下は、forループを使った解法です。
const fetchListWithAmount = async (amount: number = 5) => { const result = []; let lastItemId = undefined; while (amount > 0) { const response = await fetchList(lastItemId); const { items } = response; if (!items || items.length === 0) { break; } lastItemId = items[items.length - 1].id; result.push(...items); amount -= items.length; } return result;};
この関数では、result
という配列を定義して、受け取ったアイテムをその配列に追加しています。
そして、lastItemId
を更新し、必要な数のアイテムが収集されるまで、APIを反復的に呼び出し、収集されたアイテムの数を減らしています。
items
が返されなくなった場合、またはアイテム数が0になった場合、ループは終了します。
以下は、Async iteratorsを使用した解決策です。
async function* listIterator(since?: number) { let lastItemId = since; while (true) { const response = await fetchList(lastItemId); const { items } = response; if (!items || items.length === 0) { break; } lastItemId = items[items.length - 1].id; for (const item of items) { yield item; } }}const fetchListWithAmount = async (amount: number = 5) => { const result = []; for await (const item of listIterator()) { result.push(item); if (result.length >= amount) { break; } } return result;};
ここでは、listIterator
というasync generator関数を定義します。
この関数は、fetchList
とともにAPIを呼び出し、itemsを反復処理するためにfor-ofループを使用します。
この関数の返す値は、yieldによって生成されます。
fetchListWithAmount
は、listIterator
からアイテムを取得して、そのアイテムを含む配列を構築します。
必要な数のアイテムが構築されたら、ループは終了します。