async function fetchAllPages(baseUrl, initialParams = {}) { let allData = []; let nextPageUrl = baseUrl; let page = 1; while (nextPageUrl) { const url = new URL(nextPageUrl); // Merge initial parameters, ensuring 'page' is always the current page number for (const key in initialParams) { if (!url.searchParams.has(key)) { url.searchParams.set(key, initialParams[key]); } } url.searchParams.set('page', page); try { const response = await fetch(url.toString()); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); // Assuming API returns data in 'results' and a 'next' link for pagination allData = allData.concat(data.results || data.data || []); nextPageUrl = data.next || null; // Or check if data.pagination.nextPage exists // If API uses page numbers instead of a 'next' link: if (!nextPageUrl && data.pagination && data.pagination.totalPages > page) { page++; nextPageUrl = baseUrl; // Keep fetching the base URL with incremented page } else if (!nextPageUrl) { break; // No more pages } } catch (error) { console.error('Error fetching page:', page, error); break; // Stop on error } } return allData; } // Example Usage: // fetchAllPages('https://api.example.com/products', { limit: 10 }) // .then(products => { // console.log('Fetched all products:', products.length); // console.log(products); // }) // .catch(err => console.error('Failed to fetch all products:', err));