Rumah >hujung hadapan web >tutorial js >Permata Tersembunyi dalam Penyahpepijatan JavaScript: error.cause
Apakah cabaran terbesar dalam penyahpepijatan? Salah satu daripadanya sudah pasti mengesan punca ralat.
Bayangkan senario ini:
const func = () => { doSth('A'); doSth('B'); };
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:
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); } };
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:
try { // Some operation that may throw an error } catch (error) { throw new Error('Something went wrong', { cause: error }); }
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 }); } };
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:
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
Dalam Node.js, ralat dengan sebab dikendalikan khas dalam konsol. Semua susunan ralat yang berkaitan dicetak:
const func = () => { doSth('A'); doSth('B'); };
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); } };
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!