Bliss.js предоставляет удобный и современный подход к работе с HTTP-запросами и асинхронными операциями в браузере. Обработка ответов является ключевой частью взаимодействия с сервером, так как именно от неё зависит корректное получение и интерпретация данных.
Метод Bliss.fetch используется для отправки запросов и
получения ответа. Его вызов возвращает объект Promise,
который разрешается с объектом Response. Основные свойства
объекта Response:
status — числовой код HTTP-статуса (например,
200, 404).ok — булево значение, true если статус в
диапазоне 200–299.headers — объект заголовков ответа.text(),
json(), blob(), arrayBuffer(),
formData().Пример базового запроса и получения JSON-ответа:
Bliss.fetch('/api/data')
.then(response => {
if (!response.ok) throw new Error(`Ошибка: ${response.status}`);
return response.json();
})
.then(data => {
console.log('Данные получены:', data);
})
.catch(error => {
console.error('Ошибка запроса:', error);
});
Для удобства обработки ответов можно использовать синтаксис
async/await. Это упрощает чтение и структуру кода:
async function loadData() {
try {
const response = await Bliss.fetch('/api/data');
if (!response.ok) throw new Error(`Ошибка: ${response.status}`);
const data = await response.json();
console.log('Данные получены:', data);
} catch (error) {
console.error('Ошибка запроса:', error);
}
}
Объект headers позволяет получать и устанавливать
значения заголовков. В Bliss.js доступны методы get,
has, forEach, аналогичные стандартному API
Headers:
Bliss.fetch('/api/data')
.then(response => {
console.log('Content-Type:', response.headers.get('Content-Type'));
});
При отправке запроса заголовки можно передавать через опцию
headers:
Bliss.fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer TOKEN'
},
body: JSON.stringify({ key: 'value' })
});
Bliss.js поддерживает несколько форматов данных:
Пример обработки изображения:
const response = await Bliss.fetch('/images/photo.png');
if (response.ok) {
const blob = await response.blob();
const imgURL = URL.createObjectURL(blob);
document.querySelector('#photo').src = imgURL;
}
Bliss.js предоставляет встроенные механизмы для обработки ошибок
сетевого уровня и тайм-аутов. Если сервер недоступен или происходит
ошибка сети, Promise будет отклонен. Тайм-аут задается
через параметр timeout:
Bliss.fetch('/api/data', { timeout: 5000 })
.then(response => response.json())
.catch(error => console.error('Сетевой сбой или тайм-аут:', error));
Для сложных сценариев часто используются цепочки then,
позволяющие выполнять несколько последовательных операций с ответом.
Например, проверка статуса, парсинг JSON и фильтрация данных:
Bliss.fetch('/api/data')
.then(res => res.ok ? res.json() : Promise.reject(res.status))
.then(data => data.filter(item => item.active))
.then(filtered => console.log('Активные элементы:', filtered))
.catch(error => console.error('Ошибка обработки:', error));
Bliss.js позволяет создавать собственные функции-парсеры, если
стандартные методы (json, text) не подходят.
Это делается через передачу коллбэка в цепочке then:
Bliss.fetch('/api/custom')
.then(response => response.text())
.then(rawData => {
// кастомный парсер
const parsed = rawData.split('\n').map(line => line.split(','));
console.log(parsed);
});
Bliss.js поддерживает механизм отмены запросов через
AbortController. Это полезно для прерывания долгих
операций:
const controller = new AbortController();
Bliss.fetch('/api/data', { signal: controller.signal })
.then(response => response.json())
.then(data => console.log(data))
.catch(err => {
if (err.name === 'AbortError') console.log('Запрос отменен');
});
// Отмена запроса через 2 секунды
setTimeout(() => controller.abort(), 2000);
response.ok перед обработкой тела
ответа.blob или
arrayBuffer вместо json или
text.catch, чтобы предотвратить
необработанные исключения.AbortController для отмены устаревших или
долгих запросов.Обширный функционал Bliss.js позволяет гибко и эффективно обрабатывать ответы сервера, обеспечивая надёжное взаимодействие с любыми веб-API и удобную работу с различными типами данных.