Ինչպե՞ս կարելի է մշակել խոստման սխալը (մերժում) `await` օգտագործելիս։
sobes.tech AI
Պատասխան AI-ից
Երբ օգտագործում եք 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-ից հետո: Փոքր-ինչ պակաս նախընտրելի, բայց հնարավոր է: Սխալը կսպասի.catch()callback-ում, եթե խոստումը մերժվի: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 պարունակող կոդի բլոկի շուրջ: