Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana Anda Boleh Menangani Ralat dalam Panggilan Balik Tak Segerak Yang Tidak Dalam Skop Janji?

Bagaimana Anda Boleh Menangani Ralat dalam Panggilan Balik Tak Segerak Yang Tidak Dalam Skop Janji?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-26 10:06:02829semak imbas

How Can You Handle Errors in Asynchronous Callbacks That Are Not Within a Promise's Scope?

Pengendalian Ralat Tak Segerak dengan Rantaian Janji

Apabila bekerja dengan kod tak segerak, adalah penting untuk mempertimbangkan cara mengendalikan ralat dengan berkesan. Pengecualian yang tidak ditangkap boleh ranap aplikasi anda, jadi penting untuk mempunyai strategi.

Dalam senario yang diterangkan, Janji dibuat dengan setTimeout yang menimbulkan ralat. Pengendali tangkapan Bluebird Promise tidak akan menangkap ralat ini kerana ia berlaku dalam panggilan balik tak segerak.

Pengendalian Pengecualian dalam Janji

Janji, walau bagaimanapun, boleh menangkap pengecualian yang dilemparkan dalam fungsi panggil balik mereka sendiri. Untuk mengendalikan jenis ralat ini, anda boleh:

<code class="javascript">function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(done, 500);
  }).then(function() {
    console.log("hihihihi");
    throw new Error("Oh no!");
  });
}</code>

Di sini, ralat dilemparkan dalam panggilan balik kemudian, yang memastikan bahawa ia akan ditangkap oleh pengendali tangkapan Promise.

Kaveat dengan Panggilan Balik Asynchronous

Adalah penting untuk diingat bahawa Promises tidak mendapat pengecualian daripada panggilan balik tak segerak yang bukan dalam bidang kuasa mereka sendiri. Untuk mengendalikan jenis ralat ini, pertimbangkan:

  1. Menggunakan Promise.delay: Promise.delay membalut panggilan balik tak segerak untuk mengembalikan Promise. Sebarang ralat yang dilemparkan dalam panggilan balik akan ditangkap oleh Janji.
  2. Menolak Janji sekeliling: Apabila boleh, tolak Janji yang mengelilingi panggilan balik tak segerak dan bukannya membuang pengecualian.

Contoh Pengendalian Panggilan Balik Rogue Async

Untuk mengendalikan panggilan balik async yang jahat dalam Node.js atau penyemak imbas, anda boleh menggunakan pendekatan berikut:

<code class="javascript">function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(function() {
      try {
        // Your rogue async callback here
        console.log("hihihihi");
      } catch (e) {
        reject(e);
      }
    }, 500);
  });
}</code>

Dengan mengendalikan sebarang pengecualian secara manual dalam panggilan balik, pendekatan ini memastikan bahawa ia tidak akan ranap aplikasi anda.

Atas ialah kandungan terperinci Bagaimana Anda Boleh Menangani Ralat dalam Panggilan Balik Tak Segerak Yang Tidak Dalam Skop Janji?. 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