Janji JavaScript: Enigma Tolak vs. Lempar
Apabila bekerja dengan janji JavaScript, pembangun sering menghadapi dilema: patutkah mereka menggunakan Promise .menolak atau hanya membuang ralat? Walaupun kedua-dua kaedah mempunyai tujuan yang sama, kekeliruan masih wujud mengenai perbezaan dan potensi kelebihannya.
Meneroka Persamaan
Akhirnya, tiada kelebihan yang wujud dalam menggunakan Promise.reject terlebih membuang kesilapan atau sebaliknya. Kedua-dua mekanisme menetapkan janji kepada keadaan ditolak dan mencetuskan pelaksanaan pengendali .catch or catch().
Menyingkap Perbezaan Halus
Walau bagaimanapun, kes tertentu wujud apabila membuang ralat tidak mencukupi: panggilan balik tak segerak di luar panggilan balik janji. Dalam situasi ini, Promise.reject ialah satu-satunya pilihan untuk membuat keadaan ditolak diketahui kepada rantai janji.
Pertimbangkan contoh berikut:
<code class="javascript">new Promise(function() { setTimeout(function() { throw 'or nah'; // Using Promise.reject('or nah') also won't work in this case }, 1000); }).catch(function(e) { console.log(e); // doesn't happen });</code>
Dalam senario ini, ralat yang dilemparkan ke dalam panggilan balik setTimeout tidak akan ditangkap oleh pengendali .catch kerana ia tidak dilaksanakan dalam panggilan balik janji. Untuk mengendalikan situasi jenis ini dengan berkesan, Promise.reject mesti digunakan dalam panggilan balik tak segerak.
Memilih Amalan Terbaik
Secara amnya, sama ada Promise.reject atau throwing ralat boleh digunakan untuk menetapkan janji kepada keadaan yang ditolak. Walau bagaimanapun, apabila bekerja dengan panggilan balik tak segerak di luar panggilan balik janji, Promise.reject menjadi satu-satunya pilihan yang berdaya maju.
Atas ialah kandungan terperinci Bila hendak menggunakan Promise.reject vs. Throw in JavaScript Promises?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!