Menjelaskan Kelakuan Async/Tunggu JavaScript dalam Masa
Dalam pembangunan JavaScript moden, async/menunggu telah menjadi alat penting untuk mengendalikan kod tak segerak. Di sebalik kegunaannya, ramai pembangun menghadapi kekeliruan ketika datang untuk meramalkan masa yang tepat bagi output dalam fungsi yang menggunakan teknik ini. Ini benar terutamanya dalam penilaian pengekodan seperti yang ada daripada Adaface, yang memahami aliran operasi tak segerak adalah penting.
Masalah yang anda sedang usahakan membentangkan dua fungsi tak segerak dengan tingkah laku yang kelihatan serupa, tetapi hasil yang berbeza dari segi pemasaan. Pada pandangan pertama, fungsi mungkin kelihatan mengambil masa 10 saat, tetapi jawapan sebenar mengejutkan ramai pembangun, kerana ia melibatkan pemahaman yang lebih mendalam tentang cara janji diselesaikan.
Artikel ini bertujuan untuk membimbing anda melalui kod, memecah cara tak segerak dan tunggu mekanik berfungsi, serta cara susunan resolusi janji mempengaruhi keputusan akhir. Pada akhir ini, anda seharusnya mempunyai pemahaman yang lebih jelas tentang cara pemasaan berfungsi dalam JavaScript tak segerak.
Mari kita selami kod untuk memahami mengapa fungsi pertama keluar 24 selepas 5 saat, dan fungsi kedua juga keluar 24 tetapi dengan struktur janji yang berbeza. Dengan pengetahuan ini, anda akan lebih bersedia untuk penilaian temu duga anda yang akan datang.
Perintah | Contoh penggunaan |
---|---|
setTimeout | setTimeout(() =>setTimeout(() => { res(x); }, 5000); Perintah ini melaksanakan fungsi selepas kelewatan yang ditentukan. Dalam konteks ini, ia digunakan untuk mensimulasikan gelagat tak segerak dengan mengembalikan nilai selepas 5 saat. |
Janji baru | return new Promise(res =>kembalikan Janji baharu(res => {...}); Mencipta janji baharu yang membungkus kod tak segerak, yang membenarkan penyelesaian atau penolakan nilai sebaik sahaja operasi tak segerak selesai. |
tunggu | const f = tunggu selepas5s(3); Menjeda pelaksanaan fungsi tak segerak sehingga janji diselesaikan, menjadikan kod berkelakuan serentak dalam fungsi tak segerak. |
fungsi async | fungsi async multi(input) {...} Mengisytiharkan fungsi tak segerak yang membenarkan penggunaan tunggu dalam untuk mengendalikan operasi tak segerak dengan cara yang bersih dan boleh dibaca. |
kemudian | mult(2).then(value =>mult(2).then(value => {...}); Melampirkan panggilan balik pada janji. Apabila janji diselesaikan, panggilan balik dilaksanakan dengan nilai yang diselesaikan. |
Janji selaras | const f = after5s(3); const g = after5s(4); Ini membolehkan dua janji berjalan selari tanpa menunggu satu untuk diselesaikan sebelum memulakan yang lain, sekali gus meningkatkan prestasi. |
konsol.log | console.log(nilai); Mengeluarkan nilai kepada konsol untuk tujuan penyahpepijatan atau semakan keputusan. |
semula | res(x); Sebuah singkatan untuk azam dalam janji, ia dipanggil untuk menandakan janji sebagai selesai dan mengembalikan nilai. |
input * tunggu f | kembalikan input * tunggu f * tunggu g; Mendarabkan input dengan nilai diselesaikan dua operasi tak segerak, memastikan kedua-dua janji diselesaikan sebelum melakukan pengiraan. |
Meneroka Operasi Asynchronous dalam JavaScript
Skrip yang disediakan menunjukkan kuasa operasi tak segerak dalam JavaScript menggunakan tak segerak dan tunggu kata kunci. Idea utama adalah untuk mengendalikan tugas tak segerak seperti operasi tertangguh dengan cekap. Dalam kedua-dua contoh, fungsi selepas 5s(x) mensimulasikan kelewatan selama 5 saat dengan mengembalikan janji yang diselesaikan dengan nilai x. Kelewatan ini penting untuk memahami urutan operasi dan cara janji berinteraksi dengan aliran fungsi.
Dalam fungsi pertama, multi(input), kod menunggu secara berurutan untuk dua janji diselesaikan. The tunggu kata kunci memastikan bahawa kod menjeda pelaksanaan sehingga janji dikembalikan oleh selepas 5s(3) diselesaikan. Kemudian, selepas janji pertama diselesaikan, kod menunggu 5 saat lagi untuk janji kedua selepas 5s(4) untuk menyelesaikan. Ini menghasilkan jumlah masa menunggu selama 10 saat sebelum pengiraan dibuat. Pendaraban input dengan kedua-dua nilai diselesaikan memberikan output akhir.
Fungsi kedua, second_mult(input), meningkatkan prestasi dengan memulakan kedua-dua janji secara serentak. Dengan menugaskan selepas 5s(3) dan selepas 5s(4) kepada pembolehubah sebelum digunakan tunggu, kedua-dua janji berjalan selari. Apabila kod mencapai tunggu penyata, ia menunggu untuk kedua-dua janji diselesaikan, tetapi ia sudahpun berjalan, mengurangkan jumlah masa menunggu kepada hanya 5 saat. Pelaksanaan serentak ini menyerlahkan kepentingan mengoptimumkan operasi tak segerak.
Skrip ini menunjukkan cara async dan wait boleh digunakan untuk mengendalikan kod tak segerak dengan bersih. Memahami masa untuk menjalankan tugas tak segerak secara serentak atau berurutan adalah penting untuk mengoptimumkan prestasi. The second_mult pendekatan function menunjukkan faedah untuk mengelakkan kelewatan yang tidak perlu, manakala contoh pertama berguna apabila operasi mesti berlaku dalam susunan tertentu. Kedua-dua contoh boleh digunakan secara meluas dalam senario dunia sebenar di mana pengendalian janji diperlukan, seperti mengambil data daripada API atau melaksanakan operasi yang bergantung pada sumber luaran.
Kelakuan Async/Await Dijelaskan dalam Masa JavaScript
Contoh ini menunjukkan operasi tak segerak dalam JavaScript menggunakan tak segerak dan tunggu fungsi.
function after5s(x) {
return new Promise(res => {
setTimeout(() => {
res(x);
}, 5000);
});
}
// First approach using async/await with sequential waits
async function mult(input) {
const f = await after5s(3);
const g = await after5s(4);
return input * f * g;
}
// Calling the function and handling the promise resolution
mult(2).then(value => {
console.log(value); // Output: 24 after 10 seconds
});
Mengoptimumkan Async/Await for Concurrent Execution
Versi kod ini mengoptimumkan proses async menggunakan janji konkurensi untuk mengelakkan menunggu setiap janji secara berurutan.
function after5s(x) {
return new Promise(res => {
setTimeout(() => {
res(x);
}, 5000);
});
}
// Second approach optimizing by starting both promises concurrently
async function second_mult(input) {
const f = after5s(3); // Starts promise immediately
const g = after5s(4); // Starts second promise concurrently
return input * await f * await g;
}
// Calling the function and handling the promise resolution
second_mult(2).then(value => {
console.log(value); // Output: 24 after 5 seconds
});
Menguasai Corak Asynchronous dalam JavaScript
Salah satu konsep terpenting dalam JavaScript moden ialah cara mengendalikan tugas tak segerak dengan cekap. Manakala async/menunggu sintaks memudahkan kebolehbacaan kod tak segerak, terdapat faktor lain yang mesti dipertimbangkan oleh pembangun. Aspek kritikal menggunakan fungsi async ialah memahami cara JavaScript mengurus gelung acara dan timbunan panggilan tak segerak. Gelung peristiwa membenarkan JavaScript melaksanakan berbilang tugas secara serentak, walaupun dalam persekitaran satu benang, dengan menolak tugas tanpa sekatan, seperti janji, ke baris gilir dan meneruskan pelaksanaan kod lain.
Elemen yang sering diabaikan dalam operasi tak segerak ialah pengendalian ralat. Dengan menggunakan sintaks async/menunggu, pembangun boleh membungkus kod mereka dalam a cuba...tangkap blok untuk menguruskan penolakan janji dan ralat lain dengan anggun. Kaedah ini memastikan bahawa sebarang ralat yang berlaku dalam operasi tak segerak ditangkap dan dikendalikan tanpa melanggar aliran program. Fungsi tak segerak bukan sahaja meningkatkan prestasi tetapi juga menjadikan pengendalian ralat kompleks lebih cekap dan lebih mudah untuk nyahpepijat.
Satu lagi bidang tumpuan utama ialah bagaimana Janji.semua boleh digunakan untuk mengendalikan berbilang janji secara serentak. Tidak seperti menunggu janji secara berurutan seperti dalam contoh pertama, Janji.semua melaksanakan semua janji serentak, mengembalikan hasil dalam tatasusunan. Kaedah ini sangat membantu apabila membuat berbilang panggilan API atau melaksanakan beberapa tugas yang susunan pelaksanaannya tidak kritikal. Memahami cara menyusun tugas serentak dengan betul adalah penting untuk menulis kod JavaScript yang optimum dan berskala.
Soalan Lazim tentang Async/Await dalam JavaScript
- Apakah tujuan async dalam JavaScript?
- The async kata kunci membenarkan fungsi untuk mengembalikan janji dan membolehkan penggunaan await dalam fungsi.
- Apa yang await kata kunci lakukan?
- The await kata kunci menjeda pelaksanaan fungsi sehingga janji diselesaikan, memastikan tugas tak segerak boleh dikendalikan dengan lebih segerak.
- Bagaimanakah JavaScript mengurus pelaksanaan kod tak segerak?
- JavaScript menggunakan event loop untuk mengendalikan tugas tak segerak, membenarkan pelaksanaan kod tidak menyekat walaupun dalam persekitaran berbenang tunggal.
- Apakah perbezaan antara pelaksanaan async berurutan dan serentak?
- Dalam pelaksanaan berurutan, setiap await menjeda fungsi, manakala dalam pelaksanaan serentak, semua janji berjalan serentak, mengurangkan masa menunggu.
- Bagaimanakah pengendalian ralat berfungsi dalam async/menunggu?
- Dengan try...catch, ralat dalam fungsi tak segerak ditangkap dan dikendalikan, menghalang program daripada ranap.
Menggulung Perlaksanaan Tak Segerak dalam JavaScript
Fungsi async/wait dalam JavaScript ialah cara yang berkuasa untuk mengendalikan operasi tak segerak, menjadikan kod lebih mudah dibaca dan cekap. Dalam contoh yang disediakan, penggunaan tunggu memastikan pengendalian jujukan yang betul, dengan contoh pertama menjalankan janji secara berurutan dan yang kedua melaksanakannya secara serentak.
Dengan mengiktiraf kepentingan cara janji diselesaikan, pembangun boleh mengelakkan kelewatan yang tidak perlu dan meningkatkan prestasi aplikasi mereka. Sama ada menangani API atau tugas tak segerak yang kompleks, memanfaatkan ciri ini boleh memberikan peningkatan yang ketara dalam kedua-dua fungsi dan kejelasan kod.
Rujukan dan Sumber Luaran
- Artikel ini menggunakan maklumat daripada pegawai tersebut Dokumen Web MDN tidak segerak/menunggu , yang menawarkan panduan komprehensif tentang pengaturcaraan tak segerak dalam JavaScript.
- Untuk butiran lanjut tentang penilaian temu duga JavaScript, Ujian Dalam Talian JavaScript Adaface telah dirujuk, memberikan contoh dunia sebenar ujian teknikal yang digunakan dalam temu bual.