Pengendalian Pengecualian Asynchronous dengan Bluebird Promises
Pertimbangkan senario berikut: anda perlu mengendalikan pengecualian dalam persekitaran terkawal tanpa merosakkan aplikasi. Mari kita periksa contoh khusus ini menggunakan janji Bluebird:
<code class="javascript">var Promise = require('bluebird'); function getPromise(){ return new Promise(function(done, reject){ setTimeout(function(){ throw new Error("AJAJAJA"); }, 500); }); }</code>
Apabila pengecualian dilemparkan dalam panggilan balik setTimeout, ia ditangkap oleh gelung acara Node.js dan dilog ke konsol, menyebabkan program ranap:
$ node bluebird.js c:\blp\rplus\bbcode\scratchboard\bluebird.js:6 throw new Error("AJAJAJA"); ^ Error: AJAJAJA at null._onTimeout (c:\blp\rplus\bbcode\scratchboard\bluebird.js:6:23) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Janji, bagaimanapun, boleh menangkap pengecualian yang dilemparkan dari dalam panggilan balik pembina mereka. Untuk mengendalikan pengecualian yang dilemparkan dalam panggilan balik tak segerak, anda harus membalut panggilan balik dengan janji yang menolak apabila ralat.
<code class="javascript">function getPromise(){ return new Promise(function(done, reject){ setTimeout(function(){ done(); }, 500); }).then(function() { console.log("hihihihi"); throw new Error("Oh no!"); }); }</code>
Dalam contoh yang diubah suai ini, pengecualian ditangkap oleh rantai janji di sekeliling:
$ node bluebird.js Error [Error: Oh no!]
Ingat, janji tidak mendapat pengecualian daripada panggilan balik tak segerak. Sentiasa tolak janji sekeliling dalam kes sedemikian, dan gunakan blok cuba-tangkap jika perlu. Pendekatan ini memastikan bahawa pengecualian dikendalikan dengan anggun tanpa merosakkan aplikasi.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Pengecualian dalam Panggilan Balik Asynchronous dengan Bluebird Promises?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!