Rumah > hujung hadapan web > tutorial js > Anda Melakukan Ralat-Mengendalikan Salah!

Anda Melakukan Ralat-Mengendalikan Salah!

Susan Sarandon
Lepaskan: 2024-12-06 11:05:12
asal
935 orang telah melayarinya

You’re Doing Error-Handling Wrong!

Anda Melakukan Ralat-Mengendalikan Salah: Kes untuk Respons Boleh Diramal dan Dipiawai

Pengenalan: Pendirian Pendapat

Ralat pengendalian dalam JavaScript ialah topik yang menimbulkan pendapat yang kuat dan saya di sini untuk berkongsi pendapat saya: pendekatan cuba tangkap tradisional adalah kikuk, menyusahkan dan ketinggalan zaman. Di Garmingo, di mana kami membina Status Garmingo — penyelesaian SaaS untuk pemantauan masa operasi dan infrastruktur—kami telah beralih daripada blok cuba-tangkap. Sebaliknya, kami menerima pendekatan berasaskan TypeScript yang menyediakan respons yang boleh diramal dan diseragamkan untuk operasi tak segerak.

Artikel ini berkongsi sebab kami percaya paradigma ini adalah pengubah permainan untuk produktiviti pembangun dan cara ia membantu memudahkan pangkalan kod kami. Walaupun ia adalah pandangan yang berpandangan, saya harap ia memberi inspirasi kepada anda untuk memikirkan semula cara anda menangani ralat dalam projek anda sendiri.

Masalah dengan cuba-tangkap

Mari kita hadapi: pengendalian ralat dalam JavaScript boleh menjadi tidak kemas. Blok cuba-tangkap tradisional datang dengan pelbagai cabaran:

  1. Verbosity: Membungkus setiap panggilan fungsi tak segerak dalam try-catch menambah plat dandang yang tidak perlu. Ia mengacaukan kod anda dan menjejaskan kebolehbacaan.
  2. Objek Ralat Tidak Konsisten: Objek ralat JavaScript boleh berubah secara liar dalam struktur dan kandungan. Tanpa penyeragaman, pengendalian ralat ini selalunya terasa seperti bermain permainan meneka.
  3. Neraka Logik Bersarang: Apabila berurusan dengan berbilang operasi yang boleh gagal, blok try-catch bersarang mengubah kod anda menjadi kucar-kacir yang tidak boleh dibaca.

Berikut ialah contoh mudah yang menyerlahkan isu ini:

try {
  const user = await fetchUser();
  try {
    const account = await fetchAccount(user.id);
    console.log(account);
  } catch (accountError) {
    console.error('Error fetching account:', accountError);
  }
} catch (userError) {
  console.error('Error fetching user:', userError);
}
Salin selepas log masuk
Salin selepas log masuk

Hasilnya? Kod yang lebih sukar dibaca, nyahpepijat dan diselenggara.

Masukkan Paradigma Respons Taip TypeScript

Di Garmingo Status, kami menolak cuba-tangkap memihak kepada struktur tindak balas piawai untuk semua operasi tak segerak. Begini cara ia berfungsi:

Struktur

Setiap fungsi async mengembalikan Janji dengan jenis kesatuan yang telah ditetapkan:

Promise<
  | { success: false; error: string }
  | { success: true; result: T }
>;
Salin selepas log masuk

Pendekatan ini memastikan bahawa:

  • Jika operasi gagal, hasilnya sentiasa { success: false, error: string }.
  • Jika ia berjaya, ia adalah { kejayaan: benar, hasil: T }.
  • Jika kejayaan itu benar ada objek hasil dan tiada objek ralat dan sebaliknya. Anda tidak boleh menggunakan hasilnya pada jawapan yang gagal.

Berikut ialah contoh yang sama dari atas, ditulis semula dengan corak ini:

const userResponse = await fetchUser();

if (!userResponse.success) {
  console.error('Error fetching user:', userResponse.error);
  return;
}

const accountResponse = await fetchAccount(userResponse.result.id);

if (!accountResponse.success) {
  console.error('Error fetching account:', accountResponse.error);
  return;
}

console.log(accountResponse.result);
Salin selepas log masuk

Seperti yang anda lihat, ia tidak memperkenalkan sebarang sarang untuk logik utama apl anda. Ia hanya menambah semakan kecil ini untuk pengendalian ralat, tetapi aliran utama kekal tidak terganggu dan boleh diteruskan seperti tiada keperluan untuk pengendalian ralat pada mulanya.

Kelebihan Pengendalian Ralat Boleh Diramal dan Piawaian

1. Kebolehramalan

Faedah terbesar ialah mengetahui dengan tepat apa yang diharapkan. Sama ada operasi berjaya atau gagal, strukturnya adalah konsisten. Ini menghapuskan kekaburan yang sering datang dengan objek ralat.

2. Kemudahan Penggunaan

Sudah berlalu hari-hari blok cuba-tangkap bersarang dalam. Dengan pendekatan ditaip, anda boleh menangani ralat sebaris tanpa melanggar aliran kod anda.

3. Kebolehbacaan yang dipertingkatkan

Pendekatan berstruktur menjadikan kod anda lebih bersih dan lebih mudah untuk diikuti. Setiap operasi mentakrifkan dengan jelas perkara yang berlaku dalam senario kejayaan dan kegagalan.

4. Keselamatan Jenis Dipertingkat

Analisis statik TypeScript memastikan anda tidak pernah lupa untuk mengendalikan ralat. Jika anda secara tidak sengaja meninggalkan semakan untuk kejayaan, pengkompil TypeScript akan membenderakannya.

Perspektif yang Seimbang

Tiada pendekatan tanpa kelemahannya. Paradigma respons yang ditaip memerlukan anda menyemak status kejayaan secara eksplisit untuk setiap operasi, walaupun anda yakin ia akan berjaya. Ini menambahkan overhed kecil berbanding pendekatan tradisional, di mana anda mungkin mengelak daripada mengendalikan ralat sama sekali (walaupun atas risiko anda sendiri).

Walau bagaimanapun, "kelemahan" ini juga merupakan salah satu kekuatannya: ia memaksa anda untuk berfikir secara kritis tentang kemungkinan kegagalan, menghasilkan kod yang lebih mantap.

Cara Kami Menggunakannya di Status Garmingo

Di Garmingo, pendekatan ini telah mengubah cara kami membina utiliti dan perpustakaan tak segerak. Setiap panggilan API dan pertanyaan pangkalan data mematuhi struktur respons piawai ini, memastikan ketekalan merentas pangkalan kod kami.
Malah, SETIAP fungsi tak segerak tunggal yang digunakan semula melalui projek dan boleh gagal menggunakan pendekatan ini.
Hasilnya? Pengalaman pembangunan yang lebih lancar (dan lebih pantas) dan sesi penyahpepijatan lewat malam yang lebih sedikit.

Sebagai contoh, fungsi ambil mungkin kelihatan seperti ini:

try {
  const user = await fetchUser();
  try {
    const account = await fetchAccount(user.id);
    console.log(account);
  } catch (accountError) {
    console.error('Error fetching account:', accountError);
  }
} catch (userError) {
  console.error('Error fetching user:', userError);
}
Salin selepas log masuk
Salin selepas log masuk

Kebolehramalan ini telah menjadi pengubah permainan untuk pasukan kami, membolehkan kami menumpukan pada membina ciri dan bukannya menguraikan logik pengendalian ralat.

Kesimpulan

Blok cuba-tangkap tradisional mempunyai tempatnya, tetapi untuk pembangunan JavaScript moden — terutamanya dalam pangkalan kod TypeScript-berat — selalunya ia lebih menyusahkan daripada nilainya. Dengan menggunakan paradigma respons yang ditaip, anda memperoleh kebolehramalan, kebolehbacaan dan ketenangan fikiran.

Di Garmingo, kami telah melihat secara langsung cara pendekatan ini memudahkan pembangunan dan meningkatkan keupayaan kami untuk menyampaikan produk yang digilap seperti Status Garmingo. Walaupun ia mungkin bukan untuk semua orang, ini adalah pendekatan yang saya percaya lebih ramai pembangun harus pertimbangkan.

Jadi, adakah anda bersedia untuk memikirkan semula pengendalian ralat? Beritahu saya pendapat anda!

Atas ialah kandungan terperinci Anda Melakukan Ralat-Mengendalikan Salah!. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan