⊗jsSpPrmChE 169 of 294 menu

Պրոմիսների շղթաներում բացառությունները JavaScript-ում

Ենթադրենք, ինչ-ինչ պատճառներով մեր պրոմիսը ավարտվում է սխալով.

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

Այս դեպքում կոդի կատարումը անմիջապես կանցնի այն then-ին, որում կա սխալի մշակման ֆունկցիա, կամ առաջին catch-ին, կախված նրանից, թե ինչը կհանդիպի ավելի շուտ:

Ահա առաջին իրավիճակի օրինակ.

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // կատարումը անմիջապես կանցնի այստեղ } ).then( function(result) { console.log(result); } );

Ահա երկրորդ իրավիճակի օրինակ.

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // կատարումը անմիջապես կանցնի այստեղ } ).then( function(result) { console.log(result); } );

Սխալի մշակման ֆունկցիան ունի գործողության երկու տարբերակ. եթե այն կարողացել է հաղթահարել բացառիկ իրավիճակը, ապա կարող է վերադարձնել արդյունքը return-ի միջոցով և կատարումը կշարունակվի շղթայով առաջ: Եթե այն չի կարողացել հաղթահարել սխալը, ապա կարող է կամ ոչինչ չվերադարձնել, կամ նետել բացառություն throw-ի միջոցով: Այս դեպքում կատարումը կանցնի հաջորդ սխալի բռնողին (then-ում կամ catch-ում - կախված նրանից, թե ինչը կհանդիպի ավելի շուտ):

Որպես կանոն, շղթայի բոլոր սխալները բռնվում են մեկ տեղում. շղթայի վերջում տեղադրվում է catch.

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // կհայտնվենք այստեղ սխալի դեպքում } );

Այս դեպքում բացառությունը կարող է առաջանալ հենց պրոմիսում, կամ նետվել throw-ի միջոցով շղթայի ցանկացած օղակում.

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (ամենԻնչԼավ է) { return result + '2'; } else { throw new Error('սխալ'); // անցնում ենք մոտակա բռնողին } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // մոտակա բռնողը } );

Հաշվի առեք, որ catch-ը անհրաժեշտ է հենց սխալի ախտորոշման համար. արդյոք այն լուծելի է, թե ոչ: Եթե սխալը լուծելի է, ապա catch-ը պետք է անցնի դրա լուծումը իրեն հաջորդող then-ին: Իսկ եթե լուծելի չէ (կամ տվյալ catch-ը պարզապես չգիտի, թե ինչպես լուծել այն), ապա մենք պետք է կամ ոչինչ չվերադարձնենք, կամ նետենք բացառություն.

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (սխալըԼուծելիէ) { return 'տվյալներ'; // ուղարկում ենք հաջորդ then-ին } else { // ոչինչ չենք վերադարձնում կամ նետում ենք բացառություն } } ).then( function(result) { // այստեղ լուծում ենք սխալը } );
Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել