⊗jsSpPrmChE 169 of 294 menu

JavaScript-da Promise zanjirlarida istisnolar

Faraz qilaylik, nimadir sababli bizning promise'imiz xato bilan tugasa:

let promise = new Promise(function(resolve, reject) { setTimeout(function() { reject('error'); }, 3000); });

Bunday holatda kod bajarilishi darhol xato uchun ishlovchi funktsiya mavjud bo'lgan birinchi thenga yoki birinchi catchga o'tadi, qaysi biri oldinroq uchrashiga qarab.

Bu yerda birinchi holat misoli:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // bajarilish darhol shu yerga o'tadi } ).then( function(result) { console.log(result); } );

Bu yerda ikkinchi holat misoli:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // bajarilish darhol shu yerga o'tadi } ).then( function(result) { console.log(result); } );

Ishlovchi funktsiyaning ikkita harakat varianti bor: agar u istisno holatini hal qila olsa, return orqali natija qaytarishi mumkin va bajarilish zanjir bo'yicha davom etadi. Agar u xatoni hal qila olmasa, unda hech narsa qaytarmasligi yoki throw orqali istisno tosshi mumkin. Bunda bajarilish keyingi xato ushlagichiga o'tadi (thenda yoki catchda - qaysi biri oldinroq uchrasha).

Odatda, zanjirdagi barcha xatolar bitta joyda ushlanadi: zanjir oxirida catch joylashtiriladi:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // xato bo'lsa shu yerga tushamiz } );

Bunda istisno promisening o'zida paydo bo'lishi mumkin, yoki zanjirning istalgen bog'lagida throw orqali tashlanishi mumkin:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (hammasiYaxshi) { return result + '2'; } else { throw new Error('xato'); // eng yaqin ushlagichga o'tamiz } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // eng yaqin ushlagich } );

Yodda tuting, catch aynan xatoni diagnostika qilish uchun kerak: u hal qilinadimi yoki yo'q. Agar xato hal qilinadigan bo'lsa, catch uning yechimini o'zidan keyingi thenga uzatishi kerak. Agar hal qilinadigan bo'lmasa (yoki ushbu catch shunchaki uni qanday hal qilishni bilmasa), unda biz hech narsa qaytarmasligimiz yoki istisno tosshimiz kerak:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (xatoHalQilinadigan) { return 'ma\'lumot'; // keyingi then ga yuboramiz } else { // hech narsa qaytarmaymiz yoki istisno tosshamiz } } ).then( function(result) { // bu yerda xatoni hal qilamiz } );
Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish