⊗jsSpPrmChE 169 of 294 menu

Izņēmumi promisu ķēdēs JavaScript

Pieņemsim, ka kādu iemeslu dēļ mūsu promiss pabeidzas ar kļūdu:

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

Šajā gadījumā koda izpilde nekavējoties pāries uz to then, kurā ir kļūdas apstrādes funkcija, vai uz pirmo catch, atkarībā no tā, kas parādās agrāk.

Šeit ir piemērs pirmajai situācijai:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // izpilde nekavējoties pāries uz šo punktu } ).then( function(result) { console.log(result); } );

Šeit ir piemērs otrai situācijai:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // izpilde nekavējoties pāries uz šo punktu } ).then( function(result) { console.log(result); } );

Kļūdu apstrādes funkcijai ir divas darbības iespējas: ja tā ir tikuši galā ar izņēmuma situāciju, tā var atgriezt rezultātu, izmantojot return, un izpilde turpināsies tālāk pa ķēdi. Ja tā nav tikuši galā ar kļūdu, tā var neko neatgriezt vai izmest izņēmumu, izmantojot throw. Šajā gadījumā izpilde pāries uz nākamo kļūdu pārtvērēju (then vai catch - atkarībā no tā, kas parādās agrāk).

Parasti visas ķēdes kļūdas tiek pārtvertas vienā vietā: ķēdes beigās tiek ievietots catch:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // nonāksim šeit kļūdas gadījumā } );

Šajā gadījumā izņēmums var rasties pašā promisā vai tikt izmests, izmantojot throw, jebkurā ķēdes posmā:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (vissIrLabi) { return result + '2'; } else { throw new Error('kļūda'); // pārejam uz tuvāko pārtvērēju } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // tuvākais pārtvērējs } );

Ņemiet vērā, ka catch ir nepieciešams tieši kļūdas diagnosticēšanai: vai tā ir atrisināma vai nē. Ja kļūda ir atrisināma, tad catch ir jānodod tās risinājums sekojošajam then. Bet ja tā nav atrisināma (vai šis konkrētais catch vienkārši nezina, kā to atrisināt), tad mums vai nu nekas nav jāatdod, vai jāizmet izņēmums:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (kļūdaIrAtrisināma) { return 'dati'; // nosūtām uz nākamo then } else { // nekā neatgriežam vai izmetam izņēmumu } } ).then( function(result) { // šeit atrisinām kļūdu } );
Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt