⊗jsSpPrmChE 169 of 294 menu

Erindid JavaScripti lubaduste ahelates

Oletame, et mingil põhjusjal meie lubadus lõppeb veaga:

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

Sel juhul liigub koodi täitmine kohe sinna then blokki, kus on veatöötleja funktsioon, või esimesele catch blokile, olenevalt sellest, kumb esimesena tuleb.

Siin on näide esimesest olukorrast:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // täitmine hüppab kohe siia } ).then( function(result) { console.log(result); } );

Siin on näide teisest olukorrast:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // täitmine hüppab kohe siia } ).then( function(result) { console.log(result); } );

Vea töötleja funktsioonil on kaks võimalust: kui ta sai eriolukorraga hakkama, saab ta tagastada tulemu return kaudu ja täitmine jätkub edasi ahelas. Kui ta ei saanud veaga hakkama, siis võib ta kas midagi tagastamata jätta või visata erindi kasutades throw. Sel juhul liigub täitmine järgmise vea püüdja juurde (then või catch blokki - olenevalt, kumb esimesena tuleb).

Tavaliselt püütakse kõik ahela vead kokku ühes kohas: ahela lõppu paigutatakse catch:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // jõuame siia vea korral } );

Sel juhul võib erind tekkida lubaduses endas, või olla visatud kasutades throw ükskõik millises ahela lülis:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (kõikOnKorras) { return result + '2'; } else { throw new Error('viga'); // liigume lähima püüdja juurde } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // lähim püüdja } );

Pidage meeles, et catch on vaja just vea diagnoosimiseks: kas see on lahendatav või mitte. Kui viga on lahendatav, siis catch peaks andma selle lahenduse edasi endale järgnevale then blokile. Kui aga pole lahendatav (või antud catch lihtsalt ei tea, kuidas seda lahendada), siis peame kas midagi tagastamata jätma või erindi viskama:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (vigaOnLahendatav) { return 'andmed'; // saadame järgmisele then blokile } else { // ei tagasta midagi või viska erindit } } ).then( function(result) { // siin lahendame vea } );
Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu