@Makcimka

Как перезапустить функцию в случае ошибки?

Вот для примера, на самом деле там сложнее.
let info;
async function run(item: string){
 try {
  info = await fetch(`api/${item}.com`);
  return info;
 } catch (error) {
  throw error
 }
}

run('123')
  .then((res)=>{
    console.log(res)
  })
  .catch((err)=>{
    console.log(err)
  })

Так вот, есть возможность перезапускать функцию в случае ошибки?
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Какого-то стандартного универсального retry у промисов, вроде, нет.
Поэтому можно использовать что-то подобное:
let runWithRetry = async (func, tries = 5) => {
    let attempt = 1;
    while (attempt <= tries) {
        try {
            return await func();
        } catch (error) {
            console.log(`Attempt #${attempt} failed: ${error}`);
            attempt++;
        }
    }

    throw new Error(`Failed after ${tries} tries`);
};

try {
    let busyWork = () => new Promise((resolve, reject) => {
        setTimeout(() => (Math.random() > 0.75 ? resolve(Math.random()) : reject()), 1000);
    });

    let result = await runWithRetry(busyWork, 5);

    console.log(result);
} catch (error) {
    console.error(error);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы