Jadual Kandungan
1. Gunakan .catch() untuk pengendalian penolakan janji
2. Gunakan async/await dengan try/catch
3. Sentiasa mengendalikan kesilapan dalam .then() panggil balik
4. Elakkan penolakan yang tidak diasingkan
5. Gunakan Promise.all() dan Promise.allSettled() dengan bijak
6. Lemparkan kesilapan yang bermakna
Rumah hujung hadapan web Soal Jawab bahagian hadapan Cara Mengatasi Kesalahan dan Janji dalam JavaScript Moden

Cara Mengatasi Kesalahan dan Janji dalam JavaScript Moden

Jul 29, 2025 am 12:15 AM

Sentiasa gunakan .catch () untuk mengendalikan penolakan janji dan mencegah penolakan yang tidak diendahkan. 2. Gunakan async/menunggu dengan cuba/menangkap untuk pengendalian ralat yang boleh dibaca, memastikan semua janji ditunggu -tunggu di dalam blok percubaan. 3. Kesilapan dalam .then () panggil balik, termasuk pengecualian segerak, ditangkap oleh final .catch (), menghapuskan keperluan untuk mencuba/menangkap bersarang. 4. Memantau penolakan yang tidak diawasi secara global menggunakan 'tidak dapat dilepaskan' dalam pelayar atau 'tidak dapat dilepaskan' dalam node.js untuk debugging, tetapi selalu mengendalikan penolakan secara eksplisit. 5. Gunakan Janji.All () apabila semua janji mesti berjaya, dan janji. 6. Buang kesilapan deskriptif, kontekstual untuk meningkatkan debugging dan mengekalkan konteks kesilapan di seluruh lapisan. Secara konsisten memohon amalan ini memastikan kod JavaScript yang tidak dapat diselenggara dan tidak diselenggarakan.

Cara Mengatasi Kesalahan dan Janji dalam JavaScript Moden

Mengendalikan kesilapan dan janji dengan betul adalah penting dalam JavaScript moden, terutamanya ketika bekerja dengan operasi tak segerak seperti panggilan API, pengendalian fail, atau pemasa. Sekiranya tidak diuruskan dengan betul, penolakan yang tidak diketahui atau kegagalan senyap boleh menyebabkan pepijat yang sukar dikesan. Berikut adalah cara menangani kesilapan dan janji dengan berkesan menggunakan corak moden.

Cara Mengatasi Kesalahan dan Janji dalam JavaScript Moden

1. Gunakan .catch() untuk pengendalian penolakan janji

Setiap kali anda bekerja dengan janji-sama ada dikembalikan dari fetch , fungsi async , atau logik berasaskan janji tersuai-selalu mengendalikan penolakan yang berpotensi menggunakan .catch() .

 Ambil ('https://api.example.com/data')
  .then (response => response.json ())
  .THEN (data => console.log (data))
  .catch (error => {
    console.error ('Kesalahan berlaku:', ralat);
  });

Walaupun anda mengharapkan janji untuk menyelesaikan dengan jayanya, isu rangkaian, masalah CORS, atau JSON yang cacat boleh menyebabkan penolakan. Melangkau .catch() risiko penolakan janji yang tidak diandalkan, yang mungkin merosakkan aplikasi anda dalam persekitaran yang ketat.

Cara Mengatasi Kesalahan dan Janji dalam JavaScript Moden

? Petua: .catch() menangkap kesilapan dari mana -mana langkah terdahulu dalam rantai - sama ada kegagalan rangkaian, kesilapan parsing, atau pengecualian yang dilemparkan dalam panggilan balik .then() .


2. Gunakan async/await dengan try/catch

JavaScript moden nikmat async/await sintaks untuk kod asynchronous yang lebih bersih, lebih mudah dibaca. Tetapi dengan gaya ini, anda mesti menggunakan blok try/catch untuk mengendalikan kesilapan.

Cara Mengatasi Kesalahan dan Janji dalam JavaScript Moden
 fungsi async fetchData () {
  Cuba {
    Const Response = menunggu pengambilan ('https://api.example.com/data');
    const data = menunggu tindak balas.json ();
    console.log (data);
  } menangkap (ralat) {
    Console.error ('Ralat mengambil data:', ralat);
  }
}

Pendekatan ini mencerminkan pengendalian kesilapan segerak dan membuat debugging lebih mudah. Mana -mana janji yang ditolak di dalam blok try akan melompat ke blok catch .

Kesalahan umum: Melupakan await janji dalam fungsi async . Itu tidak akan dibuang dengan segera - ia akan mengembalikan janji yang ditolak, mungkin melangkaui try/catch anda. Sentiasa await janji di dalam try .


3. Sentiasa mengendalikan kesilapan dalam .then() panggil balik

Malah dalam .then() , kesilapan boleh berlaku - seperti logik parsing, transformasi data tidak sah, atau pernyataan throw manual. Ini secara automatik ditangkap oleh rantaian janji dan boleh dikendalikan ke hilir.

 Ambil ('/data.json')
  .THEN (res => res.json ())
  .THEN (data => {
    jika (! data.userid) {
      membuang ralat baru ('hilang userid');
    }
    pulangan data;
  })
  .catch (err => {
    Console.error ('Pengesahan atau parsing gagal:', err);
  });

Ini bermakna anda tidak perlu bersarang try/catch .then() Callbacks - hanya bergantung pada final .catch() untuk menangkap pengecualian segerak dan penolakan sama.


4. Elakkan penolakan yang tidak diasingkan

Penolakan yang tidak diendahkan berlaku apabila janji ditolak tetapi tidak .catch() dilampirkan. Pelayar moden dan Node.js amaran log untuk ini, dan versi masa depan boleh merawatnya sebagai kesilapan runtime.

Untuk memantau secara global penolakan yang tidak diasingkan (berguna dalam pembangunan atau pembalakan):

Dalam penyemak imbas:

 window.addeventListener ('Undandledrection', event => {
  Console.warn ('Penolakan Janji Tanpa Diraja:', Event.Reason);
  // secara opsyen mencegah lalai (menindas amaran)
});

Di node.js:

 Process.on ('Undandledrection', (alasan, janji) => {
  Console.error ('penolakan yang tidak ditandakan di:', janji, 'alasan:', alasan);
  // log atau hantar ke perkhidmatan penjejakan ralat
});

? Gunakan ini untuk menyahpepijat atau pemantauan, tetapi jangan bergantung kepadanya sebagai pengendalian ralat utama anda. Sentiasa mengendalikan penolakan secara eksplisit.


5. Gunakan Promise.all() dan Promise.allSettled() dengan bijak

Semasa berurusan dengan pelbagai janji:

  • Promise.all() gagal dengan cepat - Satu penolakan menyebabkan semuanya ditolak.
  • Promise.allSettled() menunggu semua selesai, tanpa mengira kejayaan atau kegagalan.

Pilih berdasarkan keperluan anda:

 // gagal atas kesalahan pertama
Cuba {
  Hasil const = menunggu janji.all ([[
    Ambil ('/API/User'),
    Ambil ('/API/POSTS'),
  ]);
} menangkap (ralat) {
  // Satu permintaan gagal gagal semuanya
}
 // Mengendalikan kegagalan separa dengan anggun
Hasil const = menanti janji.allsettled ([[
  Ambil ('/API/User'),
  Ambil ('/API/POSTS'),
]);

results.foreach ((hasil, indeks) => {
  jika (result.status === 'dipenuhi') {
    console.log ('Kejayaan:', result.value);
  } else {
    Console.error ('gagal:', result.Reason);
  }
});

Gunakan allSettled() apabila anda mahu daya tahan; Gunakan all() apabila semua operasi mesti berjaya.


6. Lemparkan kesilapan yang bermakna

Daripada mesej generik, berikan konteks supaya debugging lebih mudah.

 fungsi async getUser (id) {
  Cuba {
    const res = menunggu pengambilan (`/api/pengguna/$ {id}`);
    jika (! res.ok) {
      membuang ralat baru (`http $ {res.status}: $ {res.statustext}`);
    }
    kembali menunggu res.json ();
  } menangkap (ralat) {
    membuang ralat baru (`gagal mendapatkan pengguna $ {id}: $ {error.message}`);
  }
}

Ini mengekalkan rantaian apa yang salah dan di mana.


Pada asasnya, pengendalian kesilapan janji bersih datang ke konsistensi: sentiasa mengendalikan penolakan, lebih suka async/await dengan try/catch untuk dibaca, dan tidak pernah mengabaikan kemungkinan kegagalan. Ia tidak mencolok, tetapi ia menjadikan aplikasi anda stabil.

Atas ialah kandungan terperinci Cara Mengatasi Kesalahan dan Janji dalam JavaScript Moden. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1527
276
Menyelam mendalam ke webassembly (WASM) untuk pemaju depan Menyelam mendalam ke webassembly (WASM) untuk pemaju depan Jul 27, 2025 am 12:32 AM

WebAssembly (WASM) isagame-changerforfront-enddevelopersseekinghigh-performanceWebapplications.1.wasmisabinaryInstructionFatThatRunsatnear-nativespeed, enablinglanguageslikerust, c, andgoexecuteinthebrowser.2.itreBrowser.2.itreBrowser.2

Rendering sisi pelayan dengan Next.js dijelaskan Rendering sisi pelayan dengan Next.js dijelaskan Jul 23, 2025 am 01:39 AM

Server-siderendering (ssr) innext.jsgenerateshtmlontheserverforachrequest, InfrovingPormanceAndSeo.1.ssrisidealfordynamiccontentthatchangesfrequents, suchasuserdashboard

Pemantauan ralat dan penyelesaian pembalakan frontend Pemantauan ralat dan penyelesaian pembalakan frontend Jul 20, 2025 am 01:39 AM

Inti pemantauan dan pembalakan ralat front-end adalah untuk menemui dan mencari masalah secepat mungkin, dan elakkan aduan pengguna sebelum mengenali mereka. 1. Penangkapan kesilapan asas memerlukan penggunaan window.onerror dan window. 2. Apabila memilih sistem pelaporan ralat, berikan keutamaan kepada alat seperti Sentry, Logrocket, BugsNag, dan memberi perhatian kepada sokongan Sourcemap, penjejakan tingkah laku pengguna dan fungsi statistik pengelompokan; 3. Kandungan yang dilaporkan hendaklah termasuk maklumat penyemak imbas, URL halaman, timbunan ralat, identiti pengguna dan maklumat kegagalan permintaan rangkaian; 4. Kawalan kekerapan log untuk mengelakkan letupan log melalui strategi seperti deduplikasi, pengehadan semasa, dan pelaporan hierarki.

Memahami Corak Delegasi Acara JavaScript Memahami Corak Delegasi Acara JavaScript Jul 21, 2025 am 03:46 AM

Delegasi acara adalah teknik yang menggunakan mekanisme gelembung peristiwa untuk menyerahkan pemprosesan peristiwa elemen kanak -kanak kepada elemen induk. Ia mengurangkan penggunaan memori dan menyokong pengurusan kandungan dinamik dengan mengikat pendengar pada elemen induk. Langkah -langkah khusus adalah: 1. 2. Gunakan Event.Target untuk menentukan unsur -unsur kanak -kanak yang mencetuskan peristiwa dalam fungsi panggil balik; 3. Melaksanakan logik yang sepadan berdasarkan unsur -unsur kanak -kanak. Kelebihannya termasuk meningkatkan prestasi, memudahkan penyelenggaraan kod dan menyesuaikan diri dengan unsur -unsur yang ditambah secara dinamik. Apabila menggunakannya, anda harus memberi perhatian kepada sekatan gelembung peristiwa, elakkan pemantauan berpusat yang berlebihan, dan dengan munasabah memilih elemen induk.

Pengurusan Negeri Pertunjukan Pertama dengan Zustand Pengurusan Negeri Pertunjukan Pertama dengan Zustand Jul 25, 2025 am 04:32 AM

Zustandisalisightweight, PerformantStateManagementsolutionForreActAppsthatavoidsredux'sboilerplate; 1.useSelectiveStateslicingtopreventunnessaryre-rendersbyselecselectingonlytheneedstateProperty;

Apakah tujuan atribut REL dalam tag pautan dalam HTML? Apakah tujuan atribut REL dalam tag pautan dalam HTML? Aug 03, 2025 pm 04:50 PM

rel = "stylesheet" linkscssfilesforstylingthepage; 2.rel = "preload" hintStopreloadcriticalResourcesforperformance; 3.rel = "ikon" setSthewebsite'sfavicon; 4.rel = "alternate" menyediakan

Membina Aplikasi Frontend Tanpa Pelayan Membina Aplikasi Frontend Tanpa Pelayan Jul 20, 2025 am 04:11 AM

Inti aplikasi front-end menggunakan seni bina tanpa pelayan terletak pada hosting sumber statik dan panggilan atas permintaan. Mata utama termasuk: 1. Menyebarkan sumber statik ke CDN, secara automatik membina dan menggunakan melalui AWSS3, Vercel, Netlify dan platform lain, dan dengan mudah mengkonfigurasi dasar cache; 2. Fungsi back-end dilaksanakan oleh fungsi awan, seperti Awslambda dan CloudFlareWorkers, yang mengendalikan akses pangkalan data, menghantar e-mel, tanaman imej dan tugas-tugas lain, dan mencetuskan pulangan data JSON dengan permintaan HTTP; 3. Gunakan pangkalan data tanpa pelayan seperti supabase, dynamoDB, planetscale dan pangkalan data tanpa pelayan atau penyelesaian kod rendah untuk menguruskan data, secara langsung melalui API atau

Apakah tujuan atribut sasaran tag utama dalam HTML? Apakah tujuan atribut sasaran tag utama dalam HTML? Aug 02, 2025 pm 02:23 PM

ThetTargetTatTributeNanHtmlancHortAragspecifiesWherEtoopentHelinkedDocument.1._SelFopensTheLinkIndesAmetAB

See all articles