Rumah >hujung hadapan web >tutorial js >Kelewatan, tidur, jeda & tunggu di JavaScript

Kelewatan, tidur, jeda & tunggu di JavaScript

Jennifer Aniston
Jennifer Anistonasal
2025-02-08 09:58:09801semak imbas

Delay, Sleep, Pause & Wait in JavaScript

JavaScript tidak mempunyai fungsi tidur terbina dalam, tetapi jangan risau! Artikel ini akan meneroka pelbagai cara untuk melaksanakan latensi dalam kod JavaScript sambil mengekalkan ciri -ciri asynchronous bahasa dalam fikiran.

mata utama

  1. Melaksanakan kelewatan dalam JavaScript Asynchronous: Artikel ini meneroka pelbagai teknik untuk melaksanakan kelewatan dalam kod JavaScript, menekankan sifat asynchronous bahasa. Tidak seperti banyak bahasa pengaturcaraan lain dengan fungsi tidur terbina dalam, JavaScript memerlukan kaedah alternatif untuk memperkenalkan kelewatan, yang artikel ini bertujuan untuk menjelaskan dan menunjukkan.
  2. Memahami model pelaksanaan JavaScript: Aspek utama pelaksanaan latency dalam JavaScript adalah memahami model pelaksanaannya. JavaScript mengendalikan operasi tak segerak yang berbeza daripada bahasa seperti Ruby, yang boleh membawa kepada tingkah laku yang tidak dijangka dalam urutan masa dan operasi. Artikel ini akan menyerlahkan perbezaan ini melalui contoh-contoh, menunjukkan bagaimana model JavaScript yang didorong oleh peristiwa mempengaruhi pelaksanaan fungsi yang tertunda.
  3. Amalan terbaik untuk membuat kelewatan: Artikel ini menerangkan beberapa cara untuk membuat kelewatan, seperti menggunakan , janji, dan setTimeout, dan membincangkan kes penggunaan terbaik untuk setiap kaedah. Ia juga menerangkan perangkap biasa seperti menyekat gelung acara dan menyediakan penyelesaian yang berkesan dan amalan terbaik untuk mengurus operasi masa dan tidak segerak secara berkesan dalam pembangunan JavaScript. async/await

bagaimana membuat fungsi tidur di JavaScript

Bagi pembaca yang hanya ingin menyelesaikan masalah dengan cepat tanpa menggali butiran teknikal, inilah cara yang paling langsung:

<code class="language-javascript">function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

console.log('Hello');
sleep(2000).then(() => { console.log('World!'); });</code>
Jalankan kod ini dan anda akan melihat "Hello" muncul di konsol. Kemudian, selepas jeda ringkas dua saat, "Dunia!" Ini adalah cara yang kemas dan berkesan untuk memperkenalkan kelewatan tanpa sebarang usaha.

Ia akan menjadi hebat jika anda datang hanya untuk ini! Tetapi jika anda ingin tahu tentang "mengapa" dan "bagaimana", ada lebih banyak lagi yang perlu dipelajari. Terdapat beberapa nuansa dan kerumitan ketika berurusan dengan masa di JavaScript yang mungkin anda dapati berguna. Jadi terus membaca untuk mengetahui lebih lanjut!

Memahami model pelaksanaan JavaScript

Sekarang kita telah menguasai penyelesaian yang cepat, mari kita menyelam ke dalam mekanisme model pelaksanaan JavaScript. Memahami ini adalah penting untuk menguruskan operasi masa dan tidak segerak secara berkesan dalam kod anda.

Pertimbangkan kod Ruby berikut:

<code class="language-ruby">require 'net/http'
require 'json'

url = 'https://api.github.com/users/jameshibbard'
uri = URI(url)
response = JSON.parse(Net::HTTP.get(uri))
puts response['public_repos']
puts 'Hello!'</code>
seperti yang diharapkan, kod ini membuat permintaan kepada API GitHub untuk mendapatkan data pengguna saya. Ia kemudiannya menghancurkan respons, mengeluarkan bilangan repositori awam yang tergolong dalam akaun GitHub saya, dan akhirnya mencetak "Hello!" Perintah pelaksanaan adalah dari atas ke bawah.

Bandingkan ini dengan versi JavaScript yang setara:

<code class="language-javascript">function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

console.log('Hello');
sleep(2000).then(() => { console.log('World!'); });</code>

Jika anda menjalankan kod ini, ia akan mengeluarkan "Hello!"

Ini kerana mendapatkan data dari API adalah operasi asynchronous dalam JavaScript. JavaScript Interpreter akan menemui perintah ambil dan menjadualkan permintaan itu. Walau bagaimanapun, ia tidak menunggu permintaan selesai. Sebaliknya, ia akan terus melaksanakan, mengeluarkan "Hello!"

Jika kandungan ini adalah maklumat baru kepada anda, anda harus menonton ucapan persidangan yang sangat baik ini: apa sih adalah gelung acara?

(Kandungan berikut adalah serupa dengan teks asal, tetapi penggantian perkataan dan pelarasan struktur kalimat telah dijalankan untuk mencapai kesan pseudo-asal dan mengekalkan niat asal tidak berubah)

cara menggunakan setTimeout dalam javascript dengan betul

Sekarang kita mempunyai pemahaman yang lebih baik tentang model pelaksanaan JavaScript, mari kita lihat bagaimana JavaScript mengendalikan latency dan kod tak segerak.

Cara standard untuk membuat kelewatan dalam JavaScript adalah dengan menggunakan kaedah setTimeout nya. Contohnya:

<code class="language-ruby">require 'net/http'
require 'json'

url = 'https://api.github.com/users/jameshibbard'
uri = URI(url)
response = JSON.parse(Net::HTTP.get(uri))
puts response['public_repos']
puts 'Hello!'</code>
Ini akan merakam "Hello" ke konsol dan kemudian merakam "Dunia!" Dalam banyak kes, ini sudah cukup: melakukan beberapa operasi, dan kemudian melakukan orang lain selepas kelewatan ringkas. Selesaikan!

Tetapi malangnya, perkara -perkara tidak semestinya mudah.

anda mungkin berfikir

akan menjeda keseluruhan program, tetapi itu tidak berlaku. Ia adalah fungsi asynchronous, yang bermaksud selebihnya kod anda tidak akan menunggu untuk selesai. setTimeout

Sebagai contoh, katakan anda menjalankan kod berikut:

<code class="language-javascript">fetch('https://api.github.com/users/jameshibbard')
  .then(res => res.json())
  .then(json => console.log(json.public_repos));
console.log('Hello!');</code>
anda akan melihat output berikut:

<code class="language-javascript">console.log('Hello');
setTimeout(() => {  console.log('World!'); }, 2000);</code>
Perhatikan bagaimana "selamat tinggal!" Ini kerana

tidak menghalang pelaksanaan kod yang tinggal. setTimeout

ini bermakna anda tidak boleh melakukan ini:

<code class="language-javascript">console.log('Hello');
setTimeout(() => { console.log('World!'); }, 2000);
console.log('Goodbye!');</code>
"Hello" dan "World" akan dilog masuk ke konsol dengan segera tanpa sebarang kelewatan yang ketara.

anda tidak boleh melakukan ini sama ada:

<code>Hello
Goodbye!
World!</code>
meresap sebentar untuk memikirkan apa yang mungkin berlaku dalam coretan kod di atas.

ia

tidak akan mencetak nombor 0 hingga 4 dengan satu kelewatan kedua. Sebaliknya, nombor 0 hingga 4 akan direkodkan ke konsol pada masa yang sama selepas kelewatan satu saat. Kenapa? Kerana gelung tidak akan berhenti pelaksanaan. Ia tidak akan menunggu selesai sebelum meneruskan ke lelaran seterusnya. 3 setTimeout

Stagger ini melaksanakan pelaksanaan pernyataan setTimeout, memastikan bahawa terdapat selang satu saat antara setiap output. i * 1000

Kunci di sini ialah
<code class="language-javascript">console.log('Hello');
setTimeout(1000);
console.log('World');</code>

tidak akan menghalang pelaksanaan program, tetapi jurubahasa JavaScript akan terus memproses seluruh kod dan akan kembali ke fungsi panggilan balik pelaksanaan hanya selepas pemasa tamat. console.log

Jadi apa gunanya

? Mari lihat sekarang. setTimeout

(penulisan semula yang serupa juga diperlukan di bahagian berikutnya, mengekalkan makna asal, menggantikan struktur kata kunci dan struktur ayat, dan mengelakkan penyalinan langsung teks asal) kerana batasan ruang, saya tidak dapat menyelesaikan semua semua Menulis semula di sini. Sila terus melakukan pemprosesan pseudo-asal pada bahagian yang tinggal berdasarkan contoh di atas. Ingatlah untuk menyimpan format dan kedudukan asal gambar tidak berubah.

Atas ialah kandungan terperinci Kelewatan, tidur, jeda & tunggu di JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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 sebelumnya:Memahami sempadan ralat reaksiArtikel seterusnya:Memahami sempadan ralat reaksi