CodeGym /Kurslar /Frontend SELF AZ /Asinxron funksiyalar

Asinxron funksiyalar

Frontend SELF AZ
Səviyyə , Dərs
Mövcuddur

4.1 Async açar sözü

JavaScript-də asinxron funksiyalar asinxron kod yazmağa imkan verir ki, bu kod sinxron kimi görünsün və oxunsun. ECMAScript 2017 (ES8)-də təqdim edilən asyncawait açar sözləri promise-lərlə işləməyi daha rahat edir və kodu daha anlaşılan və idarə edilə bilən edir.

Əsas konsepsiyalar

async açar sözü funksiyanı elan etməzdən əvvəl yazılırsa, bu onun asinxron olduğunu göstərir. Asinxron funksiya həmişə promise qaytarır, hətta əgər onun daxilində return operatoru açıq şəkildə göstərilməsə belə. Əgər funksiya bir dəyər qaytarırsa, bu dəyər avtomatik olaraq promise-ə bükülür.

Sintaksis:

    
      async function ad() {
        // funksiyanın kodu
      }
    
  

Nümunə:

JavaScript
    
      async function greet() {
        return 'Salam, dünya!';
      }

      greet().then((message) => {
        console.log(message); // Çıxış: Salam, dünya!
      });
    
  

4.2 Açar sözü await

await açar sözü asinxron funksiyanın içində promisin tamamlanmasına qədər onun icrasını dayandırmaq üçün istifadə olunur. await yalnız async açar sözü ilə elan edilmiş funksiyaların içində istifadə oluna bilər.

Sintaksis:

    
      let result = await
      promise;
    
  

Nümunə:

JavaScript
    
      function delay(ms) {
        return new Promise((resolve) => setTimeout(resolve, ms));
      }

      async function greet() {
        await delay(2000);
        return 'Salam, dünya!';
      }

      async function displayGreeting() {
        const message = await greet();
        console.log(message); // Çap edəcək: Salam, dünya! 2 saniyə sonra
      }

      displayGreeting();
    
  

4.3 Async və await istifadəsinin nümunələri

Nümunə 1: Bir neçə promisin gözləndiyi asinxron funksiya

JavaScript
    
      function fetchData1() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 1'), 1000));
      }

      function fetchData2() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 2'), 2000));
      }

      async function fetchAllData() {
        const data1 = await fetchData1();
        console.log(data1); // Bu çıxacaq: Data 1 1 saniyədən sonra

        const data2 = await fetchData2();
        console.log(data2); // Bu çıxacaq: Data 2 2 saniyədən sonra
      }

      fetchAllData();
    
  

Nümunə 2: Asinxron əməliyyatların paralel icrası

Bir neçə asinxron əməliyyatı paralel yerinə yetirmək üçün Promise.all()await istifadə edə bilərsən.

JavaScript
    
      function fetchData1() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 1'), 1000));
      }

      function fetchData2() {
        return new Promise((resolve) => setTimeout(() => resolve('Data 2'), 2000));
      }

      async function fetchAllData() {
        const [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
        console.log(data1); // Bu çıxacaq: Data 1 2 saniyədən sonra
        console.log(data2); // Bu çıxacaq: Data 2 2 saniyədən sonra
      }

      fetchAllData();
    
  

Nümunə 3: try...catch ilə səhvlərin idarə olunması

Asinxron funksiyalar try...catch bloklarını səhvləri idarə etmək üçün istifadə etməyə imkan verir, bu da kodu daha oxunaqlı və idarə olunabilən edir.

JavaScript
    
      function fetchDataWithError() {
        return new Promise((resolve, reject) => setTimeout(() => reject('Səhv baş verdi'), 1000));
      }

      async function fetchData() {
        try {
          const data = await fetchDataWithError();
          console.log(data);
        } catch (error) {
          console.error('Səhv:', error); // Bu çıxacaq: Səhv: Səhv baş verdi 1 saniyədən sonra
        }
      }

      fetchData();
    
  

Nümunə 4: Async və await-in sinif metodlarında istifadəsi

Asinxron funksiyaları siniflərin metodlarında da istifadə etmək mümkündür.

JavaScript
    
      class DataFetcher {
        async fetchData() {
          const data = await new Promise((resolve) => setTimeout(() => resolve('Fetched Data'), 1000));
          return data;
        }
      }

      const fetcher = new DataFetcher();
      fetcher.fetchData().then((data) => {
        console.log(data); // Bu çıxacaq: Fetched Data 1 saniyədən sonra
      });
    
  

Nümunə 5: Asinxron iteratorlar

Asinxron iteratorlar qeyri-sinxron daxil olan məlumat axınları ilə işləməyə imkan verir.

JavaScript
    
      async function* asyncGenerator() {
        let i = 0;
        while (i < 3) {
          await new Promise((resolve) => setTimeout(resolve, 1000));
          yield i++;
        }
      }

      async function iterateAsyncGenerator() {
        for await (let value of asyncGenerator()) {
          console.log(value); // Bu çıxacaq: 0, 1 və 2 hər biri 1 saniyəlik intervalla
        }
      }

      iterateAsyncGenerator();
    
  
1
Опрос
Asinxronluq,  43 уровень,  3 лекция
недоступен
Asinxronluq
Asinxronluq
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION