Sobes.tech
Middle

Дар бораи ҳолати махсуси истифодаи функсияи setTimeout бо вақти таъхирии сифр гап занед.

sobes.tech AI

Ҷавоб аз AI

setTimeout(callback, 0) ордууло callback-ти макрозадачалар тизмесине (macrotask queue) коюп койот. callback ичиндеги код азыркы чакан стек толук бош болуп, кийинки макрозадачалар цикли ишке киришкенден кийин гана ишке ашат.

Көп колдонулган сценарийлер:

  • Кийинчерээк рендерден кийин иштетүү: Браузер 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 жүктөмүнө жана кезектеги башка тапшырмаларга (айрыкча микрозадачаларга) көз каранды.