HARDEST PROMISES
Sun Aug 17 2025 15:00:07 GMT+0000 (Coordinated Universal Time)
Saved by
@E23CSEU1151
// Utility function for delay
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Function to hit API with retries and delay
function hitApiWithRetry(url, options = {}, retries = 3, delay = 1000, callbacks = {}) {
return new Promise(async (resolve, reject) => {
for (let attempt = 1; attempt <= retries; attempt++) {
try {
console.log(`Attempt ${attempt}...`);
let response = await fetch(url, options);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
let data = await response.json();
// success callback
if (callbacks.onSuccess) {
callbacks.onSuccess(data, attempt);
}
return resolve(data); // resolve promise if success
} catch (err) {
console.error(`Error on attempt ${attempt}: ${err.message}`);
// error callback
if (callbacks.onError) {
callbacks.onError(err, attempt);
}
if (attempt < retries) {
console.log(`Retrying in ${delay}ms...`);
await wait(delay);
} else {
return reject(`Failed after ${retries} attempts`);
}
}
}
});
}
// Usage example:
hitApiWithRetry(
"https://jsonplaceholder.typicode.com/posts/1",
{},
3, // retries
2000, // delay (ms)
{
onSuccess: (data, attempt) => {
console.log(`✅ Success on attempt ${attempt}`, data);
},
onError: (err, attempt) => {
console.log(`❌ Failed on attempt ${attempt}: ${err.message}`);
}
}
)
.then(data => console.log("Final Data:", data))
.catch(err => console.log("Final Error:", err));
content_copyCOPY
Comments