@GrigoryMorozov

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

Есть вот такая функция для обращения к API:

async api(method, params = {}) {
	// ...

	if (data.response) {
		return data.response;
	}

	else {
		throw new Error(data.error);
	}
}

Предполагается, что сообщения об ошибках должны выводиться в модальном окне. Нужно понять, как наиболее правильно это реализовать. Пока что есть вот такие варианты:

1. Добавить вызов функции modal() прямо прямо перед инструкцией throw;

2. Ловить ошибки с помощью конструкции try ... catch;

async init() {
	// ...

	try {
		let response = await api('users.list');
	}

	catch (e) {
		modal(e.text);
	}
}

3. Ловить ошибки с помощью catch (хотя это не очень соответствует стилю async/await).

async function init() {
	// ...

	let response = await api('users.list').catch(e => modal(e.text));
}

Какой вариант в данной ситуации лучше использовать? Хочется писать как можно меньше кода (способ обработки ошибок не будет зависеть от их характера) и иметь возможность выйти из функции init() после обработки ошибки.

Буду благодарен за ответы.
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
Второй вариант.

Первый очень плох из-за того, что api прибивается гвоздями к какому-то modal, хотя должно заниматься только общением с сервером, в общем, полнейший бардак и никакого разделения на слои. Третий не удобен, потому что в таком виде в случае ошибки response будет равен значению, возвращаемому функцией modal, это надо проверять отдельно и всё равно выходить. Во втором всё как положено - либо работаем с респонсом, либо вываливаемся в catch
Ответ написан
Ваш ответ на вопрос

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

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