Чӣ гуна метавон хатогӣ (рад кардан) ваъдаро дар вақти истифодаи 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: Камтар тавсия дода мешавад, аммо имконпазир аст. Хатогӣ дар 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); // Идоракунии хатои парсинг }); 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 мебошад.