@Niki21212

Как правильно обработать ошибки?

Задание:

Написать функцию getRepeatableData, котрая принимает на вход три параметра:

getData- функция, возвращающая данные со стороннего источника. Может генерировать ошибки (см ниже)
key - аргумент, с которым нужно вызвать getData
maxRequestsNumber- максимальное количество вызовов getData функции. Если этот параметр отсутствует - повторяем бесконечное количество раз.
getRepeatableData(getData, key, maxRequestNumber);

Функция getRepeatableData должна вызывать getData и обрабатывать ошибки по условию:

Если вызов getData возвращает ошибку NotFoundError, то мы пробрасываем исключение.
Если вызов getData возвращает ошибку TemporaryError, то мы должны делать повторный вызов getData функции. Кол-во таких вызовов не должно превышать значение maxRequestsNumber. Если кол-во повторого вызыва превышает maxRequestsNumber, то функция getRepeatableData должна пробрасывать ошибку AttemtsLimitExceeded.
Если getData выполняется без ошибок - функция должна вернуть то, что вернула getData. Пример:
const getData = (key) => 'hello' + key;
const res = getRepeatableData(getData, '1', 3); // 'hello1'


Мой код
class AttemptsLimitExceeded extends Error {
  constructor(){
    super('Max attempts limit exceed');
    this.name = 'AttemptsLimitExceeded';
  }
}

class NotFoundError extends Error {
  constructor(){
    super('Not found');
    this.name = 'NotFoundError';
  }
}

class TemporaryError extends Error {
  constructor(){
    super('TemporaryError');
    this.name = 'TemporaryError';
  }
}

function getRepeatableData(getData, key, maxRequestsNumber) { 
let data = null;
    if (maxRequestsNumber === 0) {
        throw AttemptsLimitExceeded;
    }
    try {
        data = getData();
    } catch(e) {
        if (e == NotFoundError) {
            throw e;}
        else if (e == TemporaryError) {
            return foo(getData, maxRequestsNumber === null ? null :maxRequestsNumber - 1);
        }
    }
    return data;
}


В чем проблема?
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В чем проблема?
В отсутствии функции foo, неиспользовании аргумента в getData, попытке сравнения экземпляра с классом и, возможно, слишком большой глубине рекурсии.
Да, и ещё, отсутствующий аргумент - это не null.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
24 нояб. 2024, в 21:55
200000 руб./за проект
24 нояб. 2024, в 21:41
1000 руб./за проект
24 нояб. 2024, в 21:19
35000 руб./за проект