Izinkan saya segera menunjukkan kepada Anda beberapa hal yang baru saja kita pelajari dan praktikkan. Jadi, jangan membuat contoh yang sangat sederhana.

Jadi saya akan mulai dengan hanya mencatat tes, mulai ke konsol. Kemudian, setelah itu saya akan membuat waktu jeda yang ditetapkan, dengan sesuatu yang juga akan mengunci sesuatu di konsol saja. Jadi pengatur waktu nol detik. Itu karena kita akan mengaktifkan pengatur waktu ini tepat setelah nol detik. Oke. Jadi pada dasarnya ini adalah pengatur waktu, yang seharusnya memanggil fungsi pengatur waktu ini tepat setelah nol detik. Jadi maksudnya setelah nol detik, callback ini akan dimasukkan ke dalam antrian callback, bukan? Selanjutnya, mari kita buat janji yang segera terselesaikan. Jadi sebenarnya ini adalah sesuatu yang akan kita pelajari pada kuliah berikutnya. Jadi untuk saat ini, ikuti saja apa yang saya tulis di sini.

Jadi janji yang terselesaikan, pada dasarnya memungkinkan kita membangun sebuah janji, sehingga tercipta sebuah janji yang segera terselesaikan. Jadi yang langsung mempunyai nilai kesuksesan. Dan agar terpenuhi, nilai kesuksesan, akan menjadi nilai yang kita lewati di sini.

Jadi selesaikanlah, berjanjilah, satu, dan kemudian kita dapat menangani janji yang telah diselesaikan itu. Jadi, respons kami dapat dengan mudah kami log in ke konsol. Jadi, sama seperti janji lainnya, kita bisa menanganinya dengan metode kemudian. Dan fungsi panggilan balik ini, akan dipanggil dengan nilai terselesaikan, sebagai argumen. Jadi dalam hal ini, nilai hasil dari janji itu, adalah nilai yang baru saja kita tentukan.

Dan sekarang untuk menyelesaikannya, mari kita catat tes string lainnya. Dan, untuk saat ini, itu saja.

Jadi menurut Anda dalam urutan apa keempat pesan yang kita miliki di sini akan masuk ke konsol?

Baiklah, mari kita pikirkan bersama-sama sebelum kita benar-benar melihat hasilnya. Jadi dua pesan pertama yang akan dicetak harusnya cukup jelas, itu karena kita sudah mengetahui kode tingkat atas mana pun. Jadi kode di luar panggilan balik apa pun, akan dijalankan terlebih dahulu. Dan tentu saja, dua log pertama akan berasal dari dua konsol dot log Sierra yang sinkron ini. Tapi sekarang antara pengatur waktu dan janji yang telah diselesaikan di sini, ini mungkin sedikit lebih rumit. Jadi pengatur waktu dan janjinya, akan selesai pada waktu yang sama. Jadi keduanya tepat setelah nol detik.

Jadi pengatur waktunya, karena kita suruh selesai setelah nol detik dan janji karena kita suruh segera terselesaikan. Benar? Oleh karena itu, keduanya akan selesai pada waktu yang bersamaan.

Jadi menurut Anda yang mana yang akan ditangani terlebih dahulu atau dengan kata lain, yang mana dari dua callback berikut ini yang akan dieksekusi terlebih dahulu?

Ya, pengatur waktu muncul pertama kali dalam kode dan jadi selesai terlebih dahulu. Jadi panggilan baliknya, akan dimasukkan ke antrian panggilan balik terlebih dahulu, tetapi apakah itu berarti panggilan kembali ke sini akan dieksekusi terlebih dahulu? Sebenarnya tidak. Dan itu karena antrean tugas mikro,ingat?

Jadi panggilan balik dari janji yang diselesaikan di sini, jadi yang ini akan dimasukkan ke dalam antrian tugas mikro dan antrian tugas mikro ini, seperti yang Anda pelajari di kuliah terakhir memiliki prioritas di atas antrian panggilan balik. Jadi setelah seluruh kode ini dijalankan, kita akan memiliki satu panggilan balik di antrean panggilan balik dan satu lagi di antrean tugas mikro. Oleh karena itu, yang dari antrian pengujian mikro harus dijalankan terlebih dahulu. Oleh karena itu, panggilan balik dari antrian tugas mikro harus dijalankan terlebih dahulu. Dan jadi yang ini sana-sini untuk pesan pertama yang muncul dari keduanya, harus diselesaikan Janji yang satu. Baiklah.

Jadi urutan kemunculannya adalah ini tender, tender, dan terakhir pengatur waktunya. Dan sekarang akhirnya dikonfirmasi sebagai, jadi saya menyimpannya dan melakukan persis seperti yang diharapkan. Dan sebenarnya itu melegakan.

Jadi, apa yang saya katakan pada ceramah terakhir itu benar adanya. Sekarang kami membuktikannya dengan kode. Sekarang, ingatlah bahwa implikasi dari fakta bahwa tugas mikro memiliki prioritas dibandingkan panggilan balik biasa, adalah jika salah satu tugas mikro membutuhkan waktu lama untuk dijalankan, maka pengatur waktu sebenarnya akan tertunda dan tidak berjalan setelah nol detik itu. kami tentukan di sini, kan? Jadi, ini akan berjalan sedikit kemudian setelah tugas mikro benar-benar selesai dengan tugasnya.

Dan untuk menyelesaikan kuliah ini, mari kita simulasikan apa yang baru saja saya katakan. Jadi di sini saya akan membuat janji lain, yang akan segera terselesaikan. Jadi anggap saja janji kedua terselesaikan, dan sekali lagi, kita bisa menanganinya di sini. Dan seperti biasa, kami ingin mencatat hasilnya ke konsol. Namun sebelum kita melakukan itu, sebenarnya kita ingin fungsi callback ini memiliki tugas yang sangat berat, yang akan memakan banyak waktu. Jadi mari kita simulasikan bahwa callback ini membutuhkan waktu lama untuk dijalankan, dengan melakukan perulangan dalam jumlah besar. Jadi kita bisa melakukan simulasi secara sederhana, dengan loop empat jadul.

Jadi mari kita mulai dengan I di nol dan sekarang saya akan mengulanginya sampai satu bilangan seperti bilangan yang sangat besar. Katakanlah ini, dan saya harus bereksperimen sedikit. Dan untuk komputer Anda, mungkin memang berbeda. Jadi jika komputer Anda lebih lambat, mungkin Anda menginginkan angka yang lebih kecil dan mungkin lebih cepat dari saya. Dan mungkin jumlah yang lebih kecil sudah cukup, bukan? Saya tidak yakin apakah saya mengatakannya dengan benar. Jadi jika komputer Anda lebih lambat dari komputer saya, maka Anda memerlukan angka yang lebih besar, bukan? Dan sekali lagi, baris kode di sini akan mensimulasikan bahwa fungsi panggilan balik membutuhkan waktu lama. Jadi sebenarnya tugas mikro ini membutuhkan waktu yang lama.

Baiklah, ini bukan tugas asinkron itu sendiri. Jadi janji itu sendiri akan tetap segera diselesaikan, tetapi kemudian tugas mikro yang dikandungnya, sehingga dimasukkan ke dalam antrian tugas mikro. Itu yang akan memakan waktu lama. Jadi dengan melakukan itu, saya dapat menunjukkan kepada Anda bahwa callback dalam antrian callback, seperti yang ada di sini, memang akan tertunda dan tidak berjalan setelah nol detik.

Jadi mari kita coba ini sekarang, dan Anda lihat butuh waktu lama di sini sampai kunci ini muncul, bukan? Jadi mungkin kita bisa mendapatkan jumlah yang lebih besar lagi. Dan saya berharap komputer saya tidak meledak dengan yang satu ini. Jadi Anda melihat bahwa halaman tersebut sedang dimuat di sini dan memakan banyak waktu. Jadi, sebenarnya sekarang sudah selesai, tetapi Anda lihat, bahwa sekarang setelah semua ini berhasil, pesan pengatur waktu nol detik muncul di layar. Jadi ini adalah bukti nyata bahwa waktu nol detik yang kita miliki di sini bukanlah jaminan. Oke. Dan itulah tepatnya yang ingin saya tunjukkan kepada Anda. Artinya, Anda tidak dapat melakukan sesuatu dengan presisi tinggi menggunakan pengatur waktu JavaScript. Jadi ingatlah hal itu, setiap kali Anda bekerja dengan janji. Jadi pada dasarnya dengan tugas mikro, dan dengan pengatur waktu pada saat yang bersamaan. Oke.

Baiklah, dan itu sebenarnya cukup untuk kuliah ini. Saya rasa saya telah membuktikan maksud saya dan mendemonstrasikan hal-hal yang baru saja kita pelajari pada kuliah sebelumnya. Jadi sekarang kita siap untuk kembali ke beberapa aspek praktis dari JavaScript asynchronous, dan itu akan membuat janji dari awal di kuliah berikutnya.