Sobes.tech
Middle

გააზიარეთ setTimeout ფუნქციის გამოყენების განსაკუთრებული შემთხვევა ნულოვანი დაგვიანებით.

sobes.tech AI

პასუხი AI-სგან

setTimeout(callback, 0) მაკროადამიანის რიგში (macrotask queue) აყენებს callback-ს. callback-ის შიგნით კოდი შესრულდება შემდეგ, როდესაც მიმდინარე ზარის სტეკი იქნება ცარიელი და შემდეგი მაკროადამიანის ციკლი დაიწყება event loop-ის მიერ.

ძირითადი გამოყენების შემთხვევები:

  • გადადებული შესრულება რენდერინგის შემდეგ: საშუალებას აძლევს კოდს შესრულდეს შემდეგ, როდესაც ბრაუზერი დამუშავებს DOM-ის მიმდინარე ცვლილებებს.
    // DOM ელემენტის შეცვლა
    element.textContent = 'ახალი ტექსტი';
    
    // გადადებული მოქმედება, რომელიც დამოკიდებულია განახლებულ DOM-ზე
    setTimeout(() => {
      console.log('DOM განახლებულია, შეიძლება მუშაობა ახალი მდგომარეობით');
    }, 0);
    
  • გრძელი ოპერაციების გაყოფა: ეხმარება ძირითადი ნაკადის ბლოკირებას, გაყოფით ხანგრძლივ გამოთვლებს პატარა ნაწილებად, რომლებიც შესრულდება ცალკეულ მიკროადამიანის (macrotasks) ფარგლებში.
    function processLargeData(data) {
      let i = 0;
      function processChunk() {
        const chunkSize = 1000;
        const end = Math.min(i + chunkSize, data.length);
    
        // მონაცემების ნაწილის დამუშავება
        for (let j = i; j < end; j++) {
          // რამე data[j]-თან
        }
    
        i = end;
        if (i < data.length) {
          // გადადება შემდეგი ნაწილისთვის
          setTimeout(processChunk, 0);
        } else {
          console.log('მუშავება დასრულდა');
        }
      }
      processChunk();
    }
    
  • შესრულების გადაცემა ძირითადი სკრიპტის დასრულების შემდეგ: გარანტიას იძლევა, რომ გარკვეული კოდი შესრულდება შემდეგ, როდესაც სრული და სინქრონული ოპერაციები დასრულდება:
    console.log('სკრიპტის დასაწყისი');
    
    setTimeout(() => {
      console.log('მთავარი სკრიპტიდან შესრულება');
    }, 0);
    
    console.log('სკრიპტის ბოლო');
    // შედეგი:
    // სკრიპტის დასაწყისი
    // სკრიპტის ბოლო
    // შესრულება მთავარ სკრიპტზე შემდეგ
    

მნიშვნელოვანია გაითვალისწინოთ, რომ ნულოვანი დაგვიანება არ ნიშნავს მყისიერ შესრულებას. შესრულების დრო დამოკიდებულია event loop-ის დატვირთვაზე და სხვა რიგში მდგომ ამოცანებზე (განსაკუთრებით მიკროადამიანებზე).