Saya cari untuk mulai membuat saya JavaScript sedikit lebih bukti kesalahan, dan saya menemukan banyak dokumentasi tentang cara menggunakan try
, catch
, finally
, dan throw
, tapi aku tidak menemukan satu ton saran dari para ahli tentang kapan dan di mana untuk melempar kesalahan.
- Apakah setiap kode harus dibungkus dengan try / catch?
- Apakah ada lebih banyak nasihat seperti ini tentang kesalahan apa yang harus ditangkap?
- Apakah ada kerugian untuk meningkatkan kesalahan alih-alih kode gagal diam-diam dalam produksi?
- Ini telah disentuh pada SO sejauh implementasi, tetapi apakah kesalahan server-logging JS strategi yang efektif?
- Ada hal lain yang harus saya ketahui, tentang menjebak kesalahan dalam aplikasi saya?
Saya juga sepenuhnya permainan untuk mendengar buku-buku yang memiliki bab besar atau penjelasan mendalam tentang penanganan kesalahan. JavaScript fasih menyentuh masalah ini, tetapi tidak terlalu menentukan atau berpendapat tentang masalah ini.
Terima kasih atas saran yang bisa Anda berikan!
javascript
error-handling
Joshua Cody
sumber
sumber
Jawaban:
Satu set slide yang sangat menarik tentang Penanganan Kesalahan JavaScript Perusahaan dapat ditemukan di http://www.devhands.com/2008/10/javascript-error-handling-and-general-best-practices/
Singkatnya, ini merangkum:
Slide menjadi jauh lebih detail dan kemungkinan besar akan memberi Anda arahan.
MEMPERBARUI
Presentasi yang disebutkan di atas dapat ditemukan di sini: http://www.slideshare.net/nzakas/enterprise-javascript-error-handling-presentation
sumber
Nicholas Zakas dari Yahoo! Fame berbicara tentang Enterprise Error Handling ( slide ) di Ajax Experience 2008, di mana dia mengusulkan sesuatu seperti ini:
Setahun kemudian, Nicholas Zakas memposting pembaruan di blog-nya yang menyertakan pola cerdik untuk menyuntikkan kode penanganan kesalahan secara otomatis pada lingkungan produksi Anda (menggunakan pemrograman berorientasi aspek).
Ketika Anda mulai mencatat panggilan window.error, Anda akan melihat dua hal:
Mengurangi torrent entri log semudah menguji keparahan dan / atau nomor acak sebelum masuk ke server:
Menangani "window.error yang tidak berguna dalam undefined: 0" kesalahan tergantung pada arsitektur situs Anda, tetapi dapat mencoba mengidentifikasi semua panggilan Ajax dan melemparkan pengecualian ketika sesuatu gagal (mungkin mengembalikan jejak stack menggunakan stacktrace.js ).
sumber
if (global.logJSError) if (Math.random() < .01) logJSError('bootloader', {
(memang diakui bahwa kode tidak membatasi semua kesalahan, hanya kelas kesalahan batas waktu tertentu)IHMO, Anda harus menggunakan penanganan kesalahan dalam javascript seperti yang Anda lakukan dalam beberapa bahasa lain (AFAIK: Python, Java).
Untuk keterbacaan yang lebih baik (dan mungkin kinerja yang lebih baik, meskipun saya tidak yakin itu memiliki dampak yang sangat besar), Anda harus menggunakan blok coba / tangkap sebagian besar pada kasus-kasus berikut:
Bagian dari kode yang ingin Anda bungkus adalah bagian kunci dari keseluruhan algoritma . Jika gagal, itu bisa:
Anda tahu bahwa kode yang Anda tulis tidak kompatibel dengan setiap browser
Akhirnya, pakar javascript mungkin memiliki elemen lain untuk diberikan.
2 sen saya ke kotak,
Salam,
Maks
sumber
Selain jawaban lain: satu hal penting adalah menggunakan data konteks yang tersedia di objek kesalahan JavaScript dan dalam
window.onerror
parameter fungsi.Hal-hal seperti stacktrace (errorObject.stack), nama file, nomor baris dan nomor kolom. Perhatikan bahwa setiap browser memiliki beberapa perbedaan ... jadi lakukan yang terbaik untuk mendapatkan kesalahan yang bagus.
Bahkan bisa ada masalah dengan objek konsol itu sendiri . Saya menggunakan fungsi window.onerror khusus terinspirasi oleh ini dan fungsi khusus untuk melacak objek kesalahan standar yang diberikan terinspirasi oleh kode ini .
Poin bagus lainnya adalah memasukkan versi aplikasi web Anda di dekat stacktrace (untuk menyalin dan menempelkan dengan cepat dan aman). Anda juga dapat menampilkan kesalahan lebih agresif (waspada ...) dalam mode pengembangan karena pengembang tidak akan terus-menerus memonitor konsol browser dan mungkin tidak melihat beberapa masalah.
Juga gunakan menghindari menggunakan
throw 'My message'
, menggunakanthrow new Error('My message')
, Anda bahkan dapat memiliki kesalahan khusus, baca artikel ini .Selalu tambahkan beberapa konteks ke kesalahan (versi, id objek, beberapa pesan khusus, ...) dan juga pastikan Anda membuat perbedaan antara kesalahan eksternal (beberapa data eksternal atau keadaan membuat sistem Anda gagal) dan kesalahan internal / pernyataan (sistem Anda sendiri kacau), baca tentang ' Desain berdasarkan kontrak '.
Ini panduannya .
Pikirkan juga tentang menggunakan penanganan kesalahan umum seperti pencegat lib dan kerangka kerja Anda:
sumber