Kako obraditi grešku (odbijanje) obećanja pri korišćenju await?
sobes.tech АИ
Одговор од АИ
Када користите await са обећавањем, грешке (reject) могу бити обрађене на више начина:
-
Конструкција
try...catch: Најчешћи и препоручени начин. Елегантно ухвати грешку која се баца при решавању (resolve) или одбијању (reject) обећавања.async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error(`HTTP грешка! статус: ${response.status}`); } const data = await response.json(); console.log(data); } catch (error) { console.error('Грешка при добијању података:', error); // Додатна обрада грешке или обавештење корисника } } fetchData(); -
Метода
.catch()послеawait: Мање препоручена, али могућа. Грешка ће бити обрађена у callback-у.catch(), ако је обећање одбијено.async function fetchData() { const response = await fetch('https://api.example.com/data') .catch(error => { console.error('Грешка при извршавању fetch:', error); // Обрада грешке fetch throw error; // Преносимо грешку за даљу обраду, ако је потребно }); if (response && !response.ok) { console.error(`HTTP грешка! статус: ${response.status}`); // Обрада HTTP грешке } if (response && response.ok) { const data = await response.json() .catch(error => { console.error('Грешка при парсирању JSON:', error); // Обрада грешке парсирања JSON }); if (data) { console.log(data); } } } fetchData();Овај приступ може постати сложен када постоји много потенцијалних тачака неуспеха.
-
Обрада са враћањем вредности грешке: Неки библиотечки или сопствени позиви могу враћати пар
[податке, грешка]уместо одбијања обећања.async function safelyFetchData() { const [data, error] = await safePromise(fetch('https://api.example.com/data')); if (error) { console.error('Генерална грешка при добијању података:', error); return null; // Или друга вредност која указује на неуспех } // Предпостављамо да safePromise такође обрађује response.ok console.log(data); return data; } // Пример имплементације safePromise (поједностављено) async function safePromise(promise) { try { const result = await promise; // Овде може бити провера result.ok за fetch if (result && result.ok !== undefined && !result.ok) { throw new Error(`HTTP грешка! статус: ${result.status}`); } // За fetch, можда ће бити потребно да чекате и result.json() if (result && typeof result.json === 'function') { const jsonData = await result.json(); return [jsonData, null]; } return [result, null]; } catch (error) { return [null, error]; } } safelyFetchData();Овај образац (често називан "error-first callback" или "go-style error handling") је згодан када је потребно обрађивати грешке локално без прекидања извршења функције.
Најчистији и најчитљивији начин је коришћење try...catch око блока кода који садржи await.