⊗jsSpPrmChE 169 of 294 menu

Pengecualian dalam Rantai Promise di JavaScript

Misalkan karena alasan tertentu promise kita berakhir dengan kesalahan:

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

Dalam hal ini, eksekusi kode akan langsung beralih ke then yang memiliki fungsi penangan kesalahan, atau ke catch pertama, tergantung mana yang ditemukan lebih dulu.

Berikut adalah contoh situasi pertama:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // eksekusi akan langsung beralih ke sini } ).then( function(result) { console.log(result); } );

Berikut adalah contoh situasi kedua:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // eksekusi akan langsung beralih ke sini } ).then( function(result) { console.log(result); } );

Fungsi penangan memiliki dua opsi tindakan: jika ia berhasil menangani situasi pengecualian, maka ia dapat mengembalikan hasil melalui return dan eksekusi akan dilanjutkan ke rantai berikutnya. Jika ia tidak berhasil menangani kesalahan, maka ia dapat baik tidak mengembalikan apa pun, atau melemparkan pengecualian melalui throw. Dalam hal ini, eksekusi akan beralih ke penangkap kesalahan berikutnya (di then atau catch - mana yang ditemukan lebih dulu).

Biasanya, semua kesalahan dalam rantai ditangkap di satu tempat: sebuah catch ditempatkan di akhir rantai:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // kita akan sampai di sini jika terjadi kesalahan } );

Pengecualian dapat muncul di dalam promise itu sendiri, atau dilempar melalui throw di setiap bagian rantai:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (semuaBaik) { return result + '2'; } else { throw new Error('kesalahan'); // beralih ke penangkap terdekat } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // penangkap terdekat } );

Perlu diingat bahwa catch diperlukan tepat untuk mendiagnosis kesalahan: apakah dapat diatasi atau tidak. Jika kesalahan dapat diatasi, maka catch harus meneruskan solusinya ke then berikutnya. Dan jika tidak dapat diatasi (atau catch ini sekadar tidak tahu cara mengatasinya), maka kita harus tidak mengembalikan apa-apa atau melemparkan pengecualian:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (kesalahanDapatDiatasi) { return 'data'; // kirim ke then berikutnya } else { // tidak mengembalikan apa-apa atau melemparkan pengecualian } } ).then( function(result) { // di sini kita mengatasi kesalahan } );
Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak