⊗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हिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართული한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау