⊗jsSpPrmChE 169 of 294 menu

Исклучи во синџирите на promises во JavaScript

Нека поради некоја причина нашиот promise заврши со грешка:

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) { // ќе стигнеме овде во случај на грешка } );

При тоа, исклучокот може да се појави во самиот promise, или да биде фрлен преку 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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј