


Panduan praktikal untuk Aysnc dan Await for JavaScript Developers
pengenalan
Async dan Await ialah kata kunci JavaScript yang diperkenalkan dalam ECMAScript 2017 (ES8) yang membolehkan penulisan kod tak segerak dalam cara yang lebih mudah dibaca, seperti segerak dan terurus. Mereka memudahkan operasi pengendalian yang mengambil masa untuk diselesaikan, seperti mengambil data daripada API.
Sebelum kita menyelami, mari kita fahami konsep pengaturcaraan segerak dan tak segerak dalam JavaScript. Dalam pengaturcaraan segerak, tugasan dilaksanakan secara berurutan, satu demi satu, mengikut susunan ia muncul. Setiap tugasan mesti diselesaikan sebelum tugasan seterusnya bermula. Sebaliknya, pengaturcaraan tak segerak membenarkan tugasan dijalankan di latar belakang, membolehkan JavaScript terus melaksanakan tugasan lain tanpa menunggu tugasan sebelumnya selesai.
Seperti yang kita ketahui, JavaScript ialah bahasa berbenang tunggal, bermakna ia hanya boleh melaksanakan satu tugas pada satu masa. Jika itu yang berlaku, bagaimanakah JavaScript mengendalikan kod tak segerak? Ini dimungkinkan oleh Event Loop, mekanisme utama yang berfungsi bersama persekitaran masa jalan JavaScript. Gelung peristiwa membolehkan operasi tak segerak dijalankan tanpa menyekat utas utama, memastikan JavaScript kekal responsif. Tanpa berlengah lagi, dapatkan secawan kopi dan mari beralih terus ke topik hari ini!
Apakah Async?
Untuk lebih memahami konsep ini, kami akan mengambil pendekatan yang lebih praktikal. Sebelum pengenalan async dan tunggu, Promises telah dikendalikan menggunakan "cara lama", yang diperkenalkan dalam ES6 (ECMAScript 2015). Mari terokai contoh di bawah.
Kod di atas menunjukkan sintaks tradisional untuk mengendalikan Janji. Pembina Promise digunakan untuk mencipta contoh Promise baharu. Ia menerima fungsi (dikenali sebagai fungsi pelaksana) sebagai hujahnya, yang merangkumi dua parameter: selesaikan dan tolak. Fungsi pelaksana ini mengandungi logik untuk operasi tak segerak. Dalam contoh ini, azam dipanggil serta-merta, menandakan bahawa Janji telah berjaya diselesaikan dengan nilai tertentu. Setelah Janji diselesaikan, kaedah .then dicetuskan, melaksanakan panggilan baliknya untuk melog hasilnya.
Walau bagaimanapun, sintaks ini agak sukar untuk diingati. Pengenalan async/wait memudahkan proses pengendalian janji, menjadikannya lebih mudah untuk dibaca dan difahami. Mari lihat contoh di bawah.
Untuk melaksanakan fungsi async, kami menggunakan kata kunci async, yang memberitahu JavaScript bahawa ini bukan fungsi biasa tetapi tidak segerak. Contoh kedua menunjukkan cara perkara yang sama boleh dilakukan menggunakan fungsi anak panah.
Satu lagi konsep penting yang perlu diberi perhatian ialah kata kunci tunggu. Kedua-dua async dan await bekerjasama untuk memudahkan pengendalian Promises. Kata kunci await hanya boleh digunakan dalam fungsi tak segerak—ia tidak boleh digunakan di luar fungsi atau dalam fungsi biasa. Ia mesti sentiasa muncul dalam fungsi yang ditandakan sebagai tidak segerak. Memandangkan kita telah mempelajari asas-asasnya, mari kita selami konsepnya dengan lebih mendalam!
Cara Ia Berfungsi Di Sebalik Tabir
Ramai pembangun JavaScript menggunakan async/menunggu secara kerap dalam kod mereka, tetapi hanya segelintir yang benar-benar memahami cara ia berfungsi di bawah hud. Di situlah tutorial ini masuk. Mari terokai contoh untuk memecahkannya.
Dalam contoh ini, kami menggunakan kaedah .then untuk lebih memahami cara Janji berfungsi berbanding async/awaitapproach. Apabila fungsi handlePromise() dipanggil, kod tersebut melaksanakan baris demi baris. Apabila JavaScript menemui kaedah .then, ia mendaftarkan panggilan balik ke Microtask Queue dan segera beralih ke baris seterusnya, mencetak 'hello world'.
Setelah semua tugasan segerak selesai, enjin JavaScript menyemak Gilir Microtask untuk tugasan yang belum selesai. Selepas lima saat, setTimeout selesai dan panggilan baliknya ditolak semula ke timbunan panggilan. Pada ketika ini, Janji telah diselesaikan dan panggilan balik yang didaftarkan berjalan, mengelog hasilnya.
Ringkasnya, enjin JavaScript tidak menunggu, ia bergerak terus ke baris kod seterusnya. Sekarang, adakah tingkah laku yang sama digunakan apabila menggunakan async/menunggu, atau adakah ia berfungsi secara berbeza? Mari ketahui!
Dalam contoh di atas, apabila fungsi handlePromise() dipanggil, baris pertama 'permulaan' dicetak. JavaScript kemudian menemui kata kunci await, yang menunjukkan bahawa fungsi itu tidak segerak dan melibatkan Janji. Ia mengenal pasti bahawa Janji akan mengambil masa lima saat untuk diselesaikan disebabkan oleh setTimeout. Pada ketika ini, fungsi handlePromise() digantung (dialih keluar daripada timbunan panggilan) dan sebarang kod selepas menunggu di dalam fungsi dijeda.
Enjin JavaScript terus melaksanakan seluruh program. Selepas lima saat, Janji diselesaikan, fungsi yang digantung dikembalikan ke timbunan panggilan dan baki baris di dalam handlePromise() 'Janji diselesaikan' dan 'penghujungnya' dilaksanakan mengikut urutan.
Perlu ambil perhatian bahawa penggantungan fungsi tidak menyekat utas utama. Jika terdapat kod lain yang ditulis di luar fungsi handlePromise(), ia akan dilaksanakan sementara Promise sedang menunggu untuk diselesaikan.
Contoh di bawah menunjukkan tingkah laku ini dalam tindakan:
Dalam contoh ini, keluaran pertama ialah permulaan. Apabila JavaScript menemui kata kunci menunggu, ia menyedari bahawa Janji akan mengambil masa lima saat untuk diselesaikan. Pada ketika ini, fungsi itu digantung, dan JavaScript meneruskan untuk melaksanakan sebarang kod di luar fungsi. Akibatnya, Kami di luar dicetak seterusnya.
Setelah Promise diselesaikan selepas lima saat, fungsi handlePromise() dipulihkan kepada timbunan panggilan, dan barisnya yang selebihnya dilaksanakan, pencetakan Promise diselesaikan diikuti dengan penghujungnya.
mari kita periksa satu lagi contoh, kita akan cuba membuat panggilan API dengan async/menunggu dalam yang lain untuk memahami konsep dengan lebih baik.
Dalam kod di atas, proses pelaksanaan mengikut prinsip yang sama yang dibincangkan sebelum ini. Apabila JavaScript menemui fungsi fetch, ia menggantung fungsi getData() dan menunggu panggilan fetch mengembalikan objek respons, objek ini mengandungi pelbagai sifat seperti status, pengepala dan badan respons. Fungsi kemudian menyambung semula pelaksanaan sebaik sahaja respons tersedia.
Ibu tindak balas ialah data yang kami perlukan, tetapi ia dalam bentuk mentah (seperti teks atau binari) dan tidak boleh digunakan serta-merta. Untuk menukarnya menjadi objek JavaScript untuk manipulasi yang lebih mudah, kami menggunakan kaedah .json(), yang menghuraikan respons JSON mentah. Proses ini melibatkan Janji yang lain, itulah sebabnya penantian kedua diperlukan. Fungsi ditangguhkan lagi sehingga Janji diselesaikan.
Setelah kedua-dua Janji dipenuhi, fungsi getData() disambung semula dan data yang dihuraikan dicetak ke konsol. Cara mudah untuk menerangkan cara pengambilan berfungsi, bukan? Sekarang, kembali kepada perbincangan utama kita!. Bagaimana jika respons API kami gagal? Bagaimanakah kita menguruskan ralat dengan async/menunggu? Mari selami perkara ini dalam bahagian seterusnya.
Mengendalikan Ralat dengan Async/Await
Secara tradisinya, ralat dalam Janji dikendalikan menggunakan kaedah .catch. Tetapi bagaimana kita boleh menangani ralat apabila menggunakan async/menunggu? Di sinilah cubaan...catch block dimainkan.
Dalam kod di atas, Promise disertakan dalam blok percubaan, yang dilaksanakan jika Promise berjaya diselesaikan. Walau bagaimanapun, jika Janji ditolak, ralat akan ditangkap dan dikendalikan dalam blok tangkapan.
Tetapi adakah anda tahu kami masih boleh menangani ralat dengan cara tradisional? Berikut ialah contoh:
Untuk mengendalikan ralat dalam async/menunggu menggunakan pendekatan tradisional, anda hanya melampirkan kaedah tangkapan pada fungsi, seperti yang ditunjukkan di atas. Ia berfungsi dengan cara yang sama seperti blok cuba/tangkap.
Kesimpulan
Async/await telah merevolusikan cara JavaScript mengendalikan operasi tak segerak, menjadikan kod lebih mudah dibaca dan lebih mudah untuk diurus berbanding kaedah tradisional seperti .then dan .catch. Dengan memanfaatkan async dan menunggu, kami boleh menulis kod tak segerak yang terasa lebih segerak, meningkatkan kejelasan kod keseluruhan. Sambil memahami kerja dalaman—seperti gelung acara dan baris gilir microtask, melaksanakan async/menunggu adalah mudah dan sangat berkesan untuk pembangunan JavaScript moden. Dengan pengendalian ralat yang betul menggunakan try/catch atau .catch, kami boleh menguruskan janji yang berjaya dan gagal dengan yakin.
Terima kasih kerana bertahan! Saya harap artikel ini membuat async/menunggu sedikit lebih jelas untuk anda. Semoga anda berjaya dalam pengembaraan pengekodan anda—pergi bina sesuatu yang menakjubkan!
Atas ialah kandungan terperinci Panduan praktikal untuk Aysnc dan Await for JavaScript Developers. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.
