I would like to handle async timeouts by awaiting the execution and re-executing a function including error handling after it fails.
Pseudo code:
01 call and await async function update()
02 if no error -> continue to line 05
03 sleep for 10000ms
04 Jump to line 01 //call update() again and handle possible errors
05 //continues execution
seems simple, but I cant get the asynchronous part working
Some common structure without any promise handling
let success = false;
while (!success) {
try{
update()
success = true;
} catch (e) {
setTimeout(() => {},10000)
}
}
I know that I should be working with .catch and promises, but cant figure out how.
Thanks for any help and explanations
CodePudding user response:
Not sure if this is what you're looking for, but here's an example of retrying an async call until success, with a 3 second delay between each attempt:
const wait = timeout => new Promise(resolve => setTimeout(resolve, timeout));
let counter = 0;
async function update() {
console.log('Updating...');
await wait(1000)
if (counter === 3) {
console.log('Update success');
} else {
counter = 1;
throw new Error('Update failure');
}
}
async function callUpdateUntilSuccess() {
try {
await update();
}catch(err) {
console.error(err);
await wait(3000);
return callUpdateUntilSuccess();
}
}
(async () => {
await callUpdateUntilSuccess();
})();