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

Mary-Kate Olsen
Lepaskan: 2024-10-26 10:06:02
asal
828 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!