JS Taymerlar

ULASHISH

Funksiyani kechikish bilan ishga tushirish

JavaScript taymerlari funksiyani kechikishdan keyin yoki belgilangan oraliqlarda qayta-qayta ishga tushirish imkonini beradi.

Ikkita asosiy taymer funksiyasi — setTimeout() va setInterval().

funksiyasi Tavsif
setTimeout() Kechiktirilgandan keyin funksiyani bir marta ishga tushiradi.
setInterval() Funksiyani takroran ishga tushiradi.
clearTimeout() Timeout’ni bekor qiladi.
clearInterval() Intervalni to‘xtatadi.

setTimeout() funksiyasi

setTimeout() funksiyasi funksiyaning kechikishdan so‘ng bir marta ishga tushishini rejalashtiradi.

Sintaksis

setTimeout(function, milliseconds);

Birinchi argument bajariladigan funksiyadir.

Ikkinchi dalil - millisekundlarda kechikish.

Bir soniya 1000 millisekundga teng.

Misol

Uch soniyadan so‘ng xabarni ko‘rsatish:

// Call a Timeout
setTimeout(myFunction, 3000);

// The callback function
function myFunction() {
  myDisplayer("Hello!");
}

O‘zingiz sinab ko‘ring »

Eslatma

Function nomi funksiyaga uzatilsa, uni callback funksiyasi deyiladi.


Funksiyani uzatish

setTimeout()’ga faqat funksiya nomini uzating.

To‘g‘ri:

setTimeout(myFunction, 3000);

Noto‘g‘ri:

setTimeout(myFunction(), 3000);

Noto‘g‘ri misol myFunction()’ni darhol chaqiradi.

Keyin uning qaytariladigan qiymati setTimeout() ga uzatiladi.

Eslatma

setTimeout() funksiyasi callback funksiyasini keyinroq ishga tushirish uchun vaqt ajratadi.


Anonim funksiyadan foydalanish

Siz anonim funksiyani setTimeout() ga o‘tkazishingiz mumkin.

Misol

setTimeout(function() {
  myDisplayer("Hello!");
}, 3000);

O‘zingiz sinab ko‘ring »


Taymerlar JavaScript’ni to‘xtatib qo‘ymaydi

Calling setTimeout() does not pause JavaScript.

JavaScript darhol keyingi operator bilan davom etadi.

Misol

myDisplayer("Start");

setTimeout(function() {myDisplayer("Timer")}, 3000);

myDisplayer("End");

Natija:

Start
End
Timer

O‘zingiz sinab ko‘ring »

Eslatma

Taymer funksiyalari callback-ni keyinroq ishga tushirishni rejalashtiradi.

setTimeout() JavaScript-ni boshqa kodni ishga tushirishni to‘xtatmaydi.


Nol kechikish

Nol millisekundlik kechikish callback qilish funksiyasi darhol ishga tushishini anglatmaydi.

Bu shuni anglatadiki, callback joriy JavaScript vazifasi tugashi bilanoq boshlanadi.

Misol

myDisplayer("Start");

setTimeout(function() {myDisplayer("Timer")}, 0);

myDisplayer("End");

Natija:

Start
End
Timer

O‘zingiz sinab ko‘ring »



Kechikish — bu minimal vaqt

Belgilangan kechikish - bu callback qilishning eng erta vaqti.

Agar JavaScript band bo‘lsa, callback kechroq ishga tushishi mumkin.

Misol

setTimeout(function() {
  myDisplayer("Timer finished");
}, 1000);

let i = 4e9;
while (--i > 0);

O‘zingiz sinab ko‘ring »

Taymer kechikishi bir soniya.

Biroq, callback sikl tugamaguncha ishga tusha olmaydi.

Taymerlar ishlayotgan JavaScript kodini to‘xtatmaydi.

Uzoq vaqt davomida ishlaydigan funksiya taymer callback’larini kechiktirishi va sahifani javob bermaydigan holatga keltirishi mumkin.


Timeout’ni bekor qilish

setTimeout() funksiyasi taymer identifikatorini qaytaradi.

Taymerni bekor qilish uchun identifikatorni clearTimeout()’ga uzating.

Sintaksis

clearTimeout(timerId);

Misol

<button onclick="startTimer()">Start Timer</button>
<button onclick="stopTimer()">Stop Timer</button>

<p id="demo"></p>
let timer;

function startTimer() {
  timer = setTimeout(function() {
    document.getElementById("demo").innerHTML = "Finished";
  }, 5000);
}

function stopTimer() {
  clearTimeout(timer);
  document.getElementById("demo").innerHTML = "Timer stopped";
}

O‘zingiz sinab ko‘ring »


setInterval() funksiyasi

setInterval() funksiyasi callback funksiyani takroran ishga tushiradi.

Sintaksis

setInterval(function, milliseconds);

Callback funksiya chaqiruvlar orasida (kamida) belgilangan kechikish bilan takroran chaqiriladi.

Misol

Joriy vaqtni har soniyada ko‘rsatish:

setInterval(showTime, 1000);

function showTime() {
  const date = new Date();
  myDisplayer(date.toLocaleTimeString());
}

O‘zingiz sinab ko‘ring »


Intervalni bekor qilish

setInterval() funksiyasi interval identifikatorini qaytaradi.

Intervalni to‘xtatish uchun identifikatorni clearInterval()’ga uzating.

Sintaksis

clearInterval(intervalId);

Misol

<button onclick="startClock()">Start Clock</button>
<button onclick="stopClock()">Stop Clock</button>

<p id="demo"></p>
let timer;

function startClock() {
  if (!timer) {
    timer = setInterval(showTime, 1000);
  }
}

function showTime() {
  const date = new Date();
  document.getElementById("demo").innerHTML = date.toLocaleTimeString();
}

function stopClock() {
  clearInterval(timer);
  timer = undefined;
}

O‘zingiz sinab ko‘ring »


Timeout yoki Interval?

Use funksiyasi
Funksiyani kechikishdan so‘ng bir marta ishga tushirish setTimeout()
Funksiyani takroran ishga tushirish setInterval()
Kechiktirilgan funksiyani bekor qilish clearTimeout()
Takrorlanuvchi funksiyani to‘xtatish clearInterval()

Argumentlarni uzatish

setTimeout() yoki setInterval()’ga uzatilgan argumentlar callback funksiyaga uzatiladi.

Misol

setTimeout(showMessage, 2000, "Hello", "John");

function showMessage(greeting, name) {
  document.getElementById("demo").innerHTML = greeting + " " + name;
}

O‘zingiz sinab ko‘ring »


Takrorlanuvchi setTimeout()

Har bir vazifa tugagandan so‘ng setTimeout()’ni qayta chaqirib, takrorlanuvchi taymer yaratishingiz mumkin.

Misol

function repeat() {
  myDisplayer("Hello");
  setTimeout(repeat, 1000);
}

repeat();

O‘zingiz sinab ko‘ring »

Takroriy setTimeout() bilan keyingi kechikish joriy callback tugagandan so‘ng boshlanadi.

setInterval() bilan interval callback’larni muntazam oraliqlarda rejalashtirishda davom etadi.

Takroriy setTimeout() keyingi kechikish boshlanishidan oldin bitta vazifa tugashi kerak bo‘lganda foydali.


Teskari sanoq misoli

Misol

<button onclick="startCountdown()">Start Countdown</button>
<p id="demo"></p>
let timer;

function startCountdown() {
  clearInterval(timer);
  let count = 10;
  myDisplayer(count);

  timer = setInterval(function() {
    count--;
    myDisplayer(count);

    if (count === 0) {
      clearInterval(timer);
      myDisplayer("Finished!");
    }
  }, 1000);
}

O‘zingiz sinab ko‘ring »


Taymer kodi sifatida stringlardan foydalanmang

Taymer funksiyalari stringlarni qabul qilishi mumkin, ammo stringlarni JavaScript kodi sifatida ishlatmaslik kerak.

Tavsiya etilmaydi

setTimeout("myFunction()", 1000);

Recommended

setTimeout(myFunction, 1000);

Funksiyadan o‘tish xavfsizroq, aniqroq va debug qilish osonroq.


Taymerlar asosiy oqimda ishlaydi

Brauzer kutish davrini joriy JavaScript vazifasidan tashqari boshqaradi.

Biroq, taymerni callback qilish hali ham asosiy JavaScript-da ishlaydi.

Shu sababli uzoq ishlaydigan taymer callback’i sahifani qotirib qo‘yishi mumkin.

Misol

setTimeout(function() {
  let i = 4e9;
  while (--i > 0);
  document.getElementById("demo").innerHTML = "Finished";
}, 1000);

O‘zingiz sinab ko‘ring »

Callback boshlanganda taymer kechiktiriladi.

Bu callback-ni boshlaganidan keyin sahifani bloklashiga to‘sqinlik qilmaydi.


Taymerlar bilan bog‘liq keng tarqalgan xatolar

Funksiyani darhol chaqirish

setTimeout(myFunction(), 1000);

Funksiyani o‘tkazishda qavslarni olib tashlang:

setTimeout(myFunction, 1000);

Taymer identifikatorini unutish

Agar taymerni keyinroq bekor qilish kerak bo‘lsa, qaytarilgan identifikatorni saqlab qo‘ying.

const timer = setTimeout(myFunction, 1000);
clearTimeout(timer);

Bir nechta intervalni ishga tushirish

Intervalni bir necha marta boshlash bir nechta takrorlanuvchi taymerlarni yaratadi.

if (!timer) {
  timer = setInterval(myFunction, 1000);
}

Aniq vaqtni kutish

Taymer kechikishlari aniq jadval emas.

Callback’lar faqat JavaScript tayyor bo‘lganda ishga tushadi.

Intervalni to‘xtatishni unutish

Interval to‘xtatilmaguncha yoki sahifa yopilguncha davom etadi.

clearInterval(timer);

Slayd-shou misoli

Taymerlar yordamida rasmlarni avtomatik almashtirish mumkin.

Ushbu misolda har uch soniyada yangi rasm ko‘rsatiladi.

Misol

<img id="slide" src="img_nature.jpg" style="width:100%;max-width:600px">

<button onclick="startSlides()">Start</button>
<button onclick="stopSlides()">Stop</button>
const images = [
  "img_nature.jpg",
  "img_snowtops.jpg",
  "img_mountains.jpg"
];

let index = 0;
let timer;

function showNextSlide() {
  index = (index + 1) % images.length;
  document.getElementById("slide").src = images[index];
}

function startSlides() {
  if (!timer) {
    timer = setInterval(showNextSlide, 3000);
  }
}

function stopSlides() {
  clearInterval(timer);
  timer = undefined;
}

O‘zingiz sinab ko‘ring »

Qolgan operator % oxirgi rasmdan keyin indeksni nolga qaytaradi.

startSlides()-dagi test bir vaqtning o‘zida bir nechta intervallarning ishlashini oldini oladi.


Taymerlar va asinxron JavaScript

Taymerlar callback funksiyalarini keyinroq ishga tushirishni rejalashtiruvchi brauzer API’laridir.

Ular ko‘pincha asinxron JavaScript-ning oddiy misollari sifatida ishlatiladi.

callback-ning o‘zi asinxron emas.

Brauzer taymeri faqat callback-ni keyinroq bajarish uchun rejalashtirilishiga olib keladi.

Batafsil bilib oling:

Asynchronous programming includes:

  • Callbacks
  • Promises
  • async / await
  • Event Loop
  • Web Workers

Taymerlar asinxron dasturlashga qanday mos kelishini bilish uchun:

Read the JavaScript Async Programming Tutorial.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!