⊗jsSpPrmChE 169 of 294 menu

JavaScript-də Promise Zəncirlərində İstisnalar

Tutaq ki, nə səbəbdənsə bizim promise xəta ilə yekunlaşacaq:

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

Bu halda kodun icrası dərhal xətanı emal edən funksiyanın olduğu then-ə, ya da ilk catch-ə keçəcək, hansı əvvəl gəlirsə.

Burada birinci vəziyyətə nümunə:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // icra dərhal buraya keçəcək } ).then( function(result) { console.log(result); } );

Burada ikinci vəziyyətə nümunə:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // icra dərhal buraya keçəcək } ).then( function(result) { console.log(result); } );

Emal funksiyasının iki seçimi var: əgər o, istisnai vəziyyətin öhdəsindən gəldisə, onda return ilə nəticə qaytara bilər və icra zəncir boyu davam edəcək. Əgər o, xətanın öhdəsindən gələ bilmirsə, onda ya heç nə qaytarmaya bilər, ya da throw vasitəsilə istisna atabilər. Bu halda icra növbəti xəta tutucuya keçəcək (then və ya catch - hansı əvvəl gəlirsə).

Bir qayda olaraq, bütün zəncir xətaları bir yerdə tutulur: zəncirin sonunda catch yerləşdirilir:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // xəta olduqda buraya düşəcəyik } );

Bu zaman istisna özü promise-də yarana bilər, ya da zəncirin hər hansı bir halqasında throw vasitəsilə atıla bilər:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (hərŞeyYaxşıdır) { return result + '2'; } else { throw new Error('xəta'); // ən yaxın tutucuya keçirik } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // ən yaxın tutucu } );

Nəzərə alın ki, catch xüsusilə xətanın diaqnostikası üçün lazımdır: onun həlli var ya yox. Əgər xətanın həlli varsa, onda catch onun həllini özündən sonrakı then-ə ötürməlidir. Əgər həlli yoxdursa (və ya bu catch sadəcə onu necə həll edəcəyini bilmir), onda biz ya heç nə qaytarmamalıyıq ya da istisna atmalıyıq:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (xətaHəllOlunandır) { return 'məlumat'; // növbəti then-ə göndəririk } else { // heç nə qaytarmırıq və ya istisna atırıq } } ).then( function(result) { // burada xətanı həll edirik } );
Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČ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
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et