Sobes.tech
Junior
81
questionbank

Как ты обрабатываешь ситуацию, когда промис завершится с ошибкой (reject)?

AI答案

sobes.tech AI

Обрабатываю с помощью методов .catch() или .finally().

.catch() используется для обработки отклоненных промисов. Если промис успешно выполняется, блок .catch() игнорируется.

// Обработка ошибки с помощью .catch()
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Имитация ошибки
    }
    return response.json();
  })
  .then(data => {
    console.log('Data received:', data);
  })
  .catch(error => {
    console.error('Error:', error); // Обработка ошибки здесь
  });

.finally() выполняется независимо от того, завершился промис успешно (fulfill) или с ошибкой (reject). Он полезен для очистки ресурсов или скрытия индикаторов загрузки.

// Использование .finally() для выполнения кода после завершения промиса
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Data received:', data);
  })
  .catch(error => {
    console.error('Error:', error);
  })
  .finally(() => {
    console.log('Request finished.'); // Этот код выполнится всегда
  });

Также могу использовать конструкцию try...catch внутри async функции для обработки ошибок асинхронных операций, включая промисы:

// Обработка ошибки в async/await с помощью try...catch
async function fetchData() {
  try {
    const response = await fetch('/api/data');
    if (!response.ok) {
      throw new Error('Request failed');
    }
    const data = await response.json();
    console.log('Data received:', data);
  } catch (error) {
    console.error('Error:', error); // Обработка ошибки здесь
  } finally {
    console.log('Fetch operation finished.'); // Выполняется всегда
  }
}

fetchData();

Выбор метода зависит от контекста и требуемой логики обработки. .catch() - основная конструкция для реакции на ошибки, а .finally() - для действий, выполняемых независимо от результата. try...catch в async функциях обеспечивает более привычный синхронный стиль обработки ошибок.