Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah anda mengendalikan pengecualian yang tidak dikendalikan dalam panggilan balik tak segerak dengan janji Bluebird?

Bagaimanakah anda mengendalikan pengecualian yang tidak dikendalikan dalam panggilan balik tak segerak dengan janji Bluebird?

DDD
DDDasal
2024-10-26 16:39:301059semak imbas

How do you handle unhandled exceptions in asynchronous callbacks with Bluebird promises?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn