Rumah > hujung hadapan web > tutorial js > Permata Tersembunyi dalam Penyahpepijatan JavaScript: error.cause

Permata Tersembunyi dalam Penyahpepijatan JavaScript: error.cause

DDD
Lepaskan: 2025-01-12 16:45:47
asal
686 orang telah melayarinya

A Hidden Gem in JavaScript Debugging: error.cause

Cabaran Penyahpepijatan

Apakah cabaran terbesar dalam penyahpepijatan? Salah satu daripadanya sudah pasti mengesan punca ralat.

Bayangkan senario ini:

const func = () => {
  doSth('A');
  doSth('B');
};
Salin selepas log masuk
Salin selepas log masuk

Apabila func melemparkan ralat, bagaimana anda mengenal pasti pada langkah mana ralat itu berlaku? Adakah ia disebabkan oleh doSth('A'), doSth('B'), atau func itu sendiri? Jelas sekali, ralat tidak mempunyai konteks yang mencukupi.

Penyelesaian Biasa

Pendekatan biasa untuk menangani isu ini mungkin kelihatan seperti ini:

const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', error);
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', error);
  }
};
Salin selepas log masuk
Salin selepas log masuk

Dengan pendekatan ini, anda boleh mencari punca ralat dengan lebih mudah. Walau bagaimanapun, penyelesaian ini mempunyai beberapa had:

  1. Kehilangan butiran ralat:

    Jika ralat mengandungi maklumat yang luas (cth., muatan, kod status HTTP, kod ralat), pendekatan ini hanya menambah mesej ralat doSth kepada ralat yang baru dibina. Butiran penting lain, termasuk surih tindanan asal, hilang.

  2. Kebolehbacaan log berkurangan:

    Dengan lebih daripada dua titik ralat yang berpotensi, log boleh menjadi bersepah dan sukar untuk ditafsirkan.

  3. Kekaburan dalam menyatakan niat:

    Kod tidak secara jelas menyatakan bahawa ralat baharu disebabkan oleh fungsi doSth tertentu yang ditangkap, memberikan ruang untuk kebolehbacaan kod yang dipertingkatkan.

Memperkenalkan kesilapan.sebab

Untuk menangani isu ini, ECMAScript 2022 memperkenalkan error.cause.

Ciri ini membolehkan pembangun menentukan punca ralat apabila mencipta objek ralat baharu. Dengan menggunakan error.cause, anda boleh mewujudkan rantaian ralat, menjadikannya lebih mudah untuk nyahpepijat dan mengesan punca sesuatu isu.

Ini contoh mudah:

try {
  // Some operation that may throw an error
} catch (error) {
  throw new Error('Something went wrong', { cause: error });
}
Salin selepas log masuk

Dengan pendekatan ini, anda boleh membina pautan sebab akibat antara ralat. Contohnya:

const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', { cause: error });
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', { cause: error });
  }
};
Salin selepas log masuk

Ini membolehkan kami menangkap ralat yang dilemparkan oleh fungsi peringkat rendah (cth., doSth('A')), membuang ralat baharu yang menambah konteks yang berkaitan (cth., "Ralat berlaku semasa melaksanakan doSth('A')" ), dan simpan butiran ralat asal (cth., "A ialah hujah yang menyalahi undang-undang.").

Membina Rantaian Kesilapan

Satu lagi kelebihan error.cause ialah keupayaannya untuk mencipta rangkaian ralat terpaut, membolehkan pembangun mengesan isu kembali melalui berbilang lapisan aplikasi:

const func = () => {
  try {
    try {
      try {
        doSth('A');
      } catch (error) {
        throw new Error('Error at depth 3', { cause: error });
      }
    } catch (error) {
      throw new Error('Error at depth 2', { cause: error });
    }
  } catch (error) {
    throw new Error('Error at depth 1', { cause: error });
  }
};

console.log(error.cause.cause); // Error at depth 3
Salin selepas log masuk

Dalam Node.js, ralat dengan sebab dikendalikan khas dalam konsol. Semua susunan ralat yang berkaitan dicetak:

const func = () => {
  doSth('A');
  doSth('B');
};
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

  • Penyahpepijatan menjadi lebih mudah apabila anda mempunyai akses segera kepada konteks ralat dan butiran.
  • Satu cara berkesan untuk mencapai matlamat ini ialah dengan menggunakan corak "catch rethrow with context" menggunakan ciri error.cause:
const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', error);
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', error);
  }
};
Salin selepas log masuk
Salin selepas log masuk

Pendekatan ini bukan sahaja meningkatkan kebolehkesanan ralat tetapi juga meningkatkan kebolehbacaan dan kebolehselenggaraan kod anda.


Kami ialah Leapcell, pilihan utama anda untuk menggunakan projek Node.js ke awan.

A Hidden Gem in JavaScript Debugging: error.cause

Leapcell ialah Platform Tanpa Pelayan Generasi Seterusnya untuk Pengehosan Web, Tugas Async dan Redis:

Sokongan Berbilang Bahasa

  • Bangun dengan Node.js, Python, Go atau Rust.

Kerahkan projek tanpa had secara percuma

  • bayar hanya untuk penggunaan — tiada permintaan, tiada caj.

Kecekapan Kos yang tiada tandingan

  • Bayar semasa anda pergi tanpa caj terbiar.
  • Contoh: $25 menyokong 6.94 juta permintaan pada purata masa tindak balas 60ms.

Pengalaman Pembangun Diperkemas

  • UI intuitif untuk persediaan mudah.
  • Saluran paip CI/CD automatik sepenuhnya dan penyepaduan GitOps.
  • Metrik masa nyata dan pengelogan untuk mendapatkan cerapan yang boleh diambil tindakan.

Skala Mudah dan Prestasi Tinggi

  • Penskalaan automatik untuk mengendalikan konkurensi tinggi dengan mudah.
  • Sifar operasi overhed — hanya fokus pada pembinaan.

Terokai lagi dalam Dokumentasi!

A Hidden Gem in JavaScript Debugging: error.cause

Ikuti kami di X: @LeapcellHQ


Baca di blog kami

Atas ialah kandungan terperinci Permata Tersembunyi dalam Penyahpepijatan JavaScript: error.cause. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan