Дмитрий Нечаев
Метод finally() в JavaScript
В JavaScript промисы являются мощным инструментом для управления асинхронными операциями. Они позволяют обрабатывать результаты асинхронных функций, таких как запросы к серверу, чтение файлов и т.д. Один из методов промисов — .finally()
, который позволяет выполнить код после того, как промис завершил своё выполнение, независимо от того, был ли он разрешён или отклонён. Это особенно полезно для выполнения общих задач очистки или завершения, таких как скрытие индикаторов загрузки.
Метод finally()
предоставляет возможность выполнить код после завершения Promise
, независимо от того, был он выполнен успешно или отклонен. Это полезно для очистки ресурсов или выполнения других действий, которые должны быть выполнены в любом случае. Чтобы понять, как эффективно использовать finally()
, и в каких случаях он наиболее полезен, требуется хорошее знание Promise
и обработки исключений. Если вы хотите детальнее погрузиться в JavaScript — приходите на наш большой курс JavaScript Advanced. На курсе 196 уроков и 18 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Описание метода .finally()
.finally()
добавляется в конец цепочки промисов и принимает функцию, которая будет выполнена после того, как промис будет разрешен или отклонен. Важно отметить, что функция, вызываемая через .finally()
, не получает никаких аргументов, то есть в ней недоступен результат или ошибка из промиса.
Пример использования .finally()
Давайте рассмотрим пример, где вы хотите загрузить данные с сервера и, независимо от результата запроса, убедиться, что индикатор загрузки будет скрыт после завершения операции.
// Функция для имитации загрузки данных
function fetchData() {
return new Promise((resolve, reject) => {
// Имитация асинхронной операции с использованием setTimeout
setTimeout(() => {
// Имитируем успешную или неуспешную загрузку с вероятностью 50%
if (Math.random() > 0.5) {
resolve("Данные загружены успешно");
} else {
reject("Ошибка загрузки данных");
}
}, 2000); // Задержка в 2 секунды
});
}
// Использование промиса с .finally()
fetchData()
.then(data => {
console.log("Результат:", data); // Обработка успешного результата
})
.catch(error => {
console.error("Ошибка:", error); // Обработка ошибки
})
.finally(() => {
console.log("Загрузка завершена."); // Выполняется всегда после .then или .catch
});
Когда использовать .finally()
Метод .finally()
особенно полезен в следующих случаях:
- Очистка ресурсов: например, закрытие файловых дескрипторов или сетевых соединений, независимо от результата операции.
- Скрытие индикаторов загрузки или сообщений о процессе: если вы показываете пользователю индикатор загрузки, его нужно скрыть после завершения операции, независимо от исхода.
- Логирование: запись информации о завершении операции в логи, не вдаваясь в детали результата.
Заключение
Использование .finally()
в JavaScript позволяет упростить управление асинхронными операциями, делая код чище и более надежным. Этот метод помогает обеспечить, что необходимые действия по завершении работы промиса будут выполнены, независимо от того, с успехом он завершился или с ошибкой.
finally()
добавляет гибкости в обработку Promise
. Но для создания действительно надежного асинхронного кода, важно знать не только этот метод, но и другие инструменты, такие как async/await
и правильную обработку ошибок. Получите эти знания на курсе JavaScript Advanced. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир продвинутого JavaScript прямо сегодня.
Постройте личный план изучения Javascript до уровня Middle — бесплатно!
Javascript — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Javascript
Лучшие курсы по теме

Основы JavaScript
Антон Ларичев
TypeScript с нуля
Антон Ларичев