/**
* Loads resources from an array of URLs, with fallback logic.
* @param {Array<string>} urls An array of URLs to load resources from.
* @param {number} retries The number of retries if a resource fails to load.
* @returns {Promise<Array<any>>} A promise that resolves with an array of loaded resources.
* Returns an empty array if all resources fail to load after retries.
*/
async function loadResources(urls, retries = 3) {
const loadedResources = [];
for (const url of urls) {
let resource;
let success = false;
for (let i = 0; i < retries; i++) {
try {
resource = await fetch(url); // Attempt to fetch the resource
if (!resource.ok) {
throw new Error(`HTTP error! Status: ${resource.status}`);
}
resource = await resource.json(); // Attempt to parse as JSON
success = true;
break; // Exit retry loop on success
} catch (error) {
console.error(`Failed to load ${url} (attempt ${i + 1}):`, error);
if (i === retries - 1) {
console.warn(`Failed to load ${url} after ${retries} retries.`);
break; // Exit retry loop after all retries fail
}
}
}
if (success) {
loadedResources.push(resource);
}
}
return loadedResources;
}
Add your comment