Pengendalian Pengecualian Tak Segerak dengan Janji Bluebird
S: Bagaimana untuk mengendalikan pengecualian yang tidak dikendalikan dalam panggilan balik tak segerak dengan janji Bluebird?
Janji Bluebird sememangnya tidak menangkap pengecualian yang dilemparkan daripada panggilan balik tak segerak, tidak seperti domain.
J: Gunakan Promise Constructors atau kemudian() Penutupan untuk Mengendalikan Pengecualian
Untuk menangkap pengecualian dalam panggilan balik tak segerak, bungkus panggilan balik dalam pembangun janji atau kemudian() penutupan:
<code class="javascript">function getPromise(){ return new Promise(function(done, reject){ setTimeout(function(){ throw new Error("AJAJAJA"); }, 500); }).then(function() { console.log("hihihihi"); throw new Error("Oh no!"); }); }</code>
Elakkan Melemparkan Panggilan Balik Async Tersuai
Jangan sekali-kali buang pengecualian terus dalam panggilan balik asinkron tersuai (di luar panggilan balik janji). Sebaliknya, tolak janji sekeliling:
<code class="javascript">function getPromise(){ return new Promise(function(done, reject){ setTimeout(done, 500); }).then(function() { console.log("hihihihi"); reject(new Error("Oh no!")); }); }</code>
Contoh
Menggunakan pembina janji:
<code class="javascript">var p = getPromise(); p.then(function(){ console.log("Yay"); }).error(function(e){ console.log("Rejected",e); }).catch(Error, function(e){ console.log("Error",e); }).catch(function(e){ console.log("Unknown", e); });</code>
Output:
Error [Error: Oh no!]
Pendekatan ini memastikan pengecualian ditangkap dan dikendalikan dengan sewajarnya, menghalang aplikasi daripada ranap.
Atas ialah kandungan terperinci Bagaimanakah anda mengendalikan pengecualian yang tidak dikendalikan dalam panggilan balik tak segerak dengan janji Bluebird?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!