Apakah cabaran terbesar dalam penyahpepijatan? Salah satu daripadanya sudah pasti mengesan punca ralat.
Bayangkan senario ini:
1 2 3 4 |
|
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.
Pendekatan biasa untuk menangani isu ini mungkin kelihatan seperti ini:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Dengan pendekatan ini, anda boleh mencari punca ralat dengan lebih mudah. Walau bagaimanapun, penyelesaian ini mempunyai beberapa had:
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.
Kebolehbacaan log berkurangan:
Dengan lebih daripada dua titik ralat yang berpotensi, log boleh menjadi bersepah dan sukar untuk ditafsirkan.
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.
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:
1 2 3 4 5 |
|
Dengan pendekatan ini, anda boleh membina pautan sebab akibat antara ralat. Contohnya:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
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.").
Satu lagi kelebihan error.cause ialah keupayaannya untuk mencipta rangkaian ralat terpaut, membolehkan pembangun mengesan isu kembali melalui berbilang lapisan aplikasi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Dalam Node.js, ralat dengan sebab dikendalikan khas dalam konsol. Semua susunan ralat yang berkaitan dicetak:
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Pendekatan ini bukan sahaja meningkatkan kebolehkesanan ralat tetapi juga meningkatkan kebolehbacaan dan kebolehselenggaraan kod anda.
Leapcell ialah Platform Tanpa Pelayan Generasi Seterusnya untuk Pengehosan Web, Tugas Async dan Redis:
Sokongan Berbilang Bahasa
Kerahkan projek tanpa had secara percuma
Kecekapan Kos yang tiada tandingan
Pengalaman Pembangun Diperkemas
Skala Mudah dan Prestasi Tinggi
Terokai lagi dalam Dokumentasi!
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!