JavaScript Janji: Meneroka Perbezaan Antara reject() dan throw()
Janji dalam JavaScript menyediakan mekanisme yang berkuasa untuk mengendalikan operasi tak segerak. Rawatan ralat dan penolakan dalam Promises telah menimbulkan persoalan mengenai perbezaan antara menggunakan Promise.reject() dan hanya membuang ralat.
Perbandingan Penggunaan
Kod berikut coretan menunjukkan penggunaan kedua-dua kaedah:
<code class="javascript">// Using Promise.reject() return asyncIsPermitted() .then(result => { if (result === true) { return true; } else { return Promise.reject(new PermissionDenied()); } });</code>
<code class="javascript">// Using throw return asyncIsPermitted() .then(result => { if (result === true) { return true; } else { throw new PermissionDenied(); } });</code>
Perbezaan dalam Tingkah Laku
Secara amnya, tiada perbezaan fungsi antara menggunakan Promise.reject() dan membuang ralat dalam panggilan balik Promise. Kedua-duanya akan mengakibatkan Janji ditolak dan pengendali penolakan dipanggil.
Pengecualian kepada Peraturan
Walau bagaimanapun, pengecualian timbul apabila ralat dilemparkan ke luar Janji panggil balik. Dalam kes ini, Promise.reject() mesti digunakan untuk menyebarkan ralat ke dalam rantai Promise. Sebagai contoh, kod berikut tidak akan mencetuskan blok tangkapan:
<code class="javascript">new Promise(function() { setTimeout(function() { throw 'or nah'; // return Promise.reject('or nah'); also won't work }, 1000); }).catch(function(e) { console.log(e); // doesn't happen });</code>
Untuk mengendalikan ralat yang dilemparkan di luar panggilan balik Promise, gunakan Promise.reject() untuk menukarnya menjadi penolakan Promise.
Kesimpulan
Walaupun tiada kelebihan yang wujud untuk menggunakan satu kaedah berbanding yang lain dalam panggilan balik Promise, Promise.reject() adalah penting apabila mengendalikan ralat di luar panggilan balik Promise. Memahami perbezaan ini memastikan pengendalian ralat yang betul dan pengaturcaraan tak segerak yang cekap.
Atas ialah kandungan terperinci Apakah Perbezaan Antara Promise.reject() dan Melempar Ralat dalam Janji JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!