Promiselər

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

2.1 Promiselərin yaradılması

Promiselər (Promises) — asinxron əməliyyatın uğurla tamamlanmasını (və ya uğursuzluğunu) və onun nəticəsini təmsil edən obyektdir. Onlar ES6 (ECMAScript 2015)-də təqdim edilib və JavaScript-də asinxron kodla işləməyin standart üsuluna çevrildilər.

Əsas konseptlər

Promise üç vəziyyətdən birində ola bilər:

  1. Pending (gözləmə): ilkin vəziyyət, nə yerinə yetirilib, nə də rədd edilib.
  2. Fulfilled (yerinə yetirilib): əməliyyat uğurla tamamlanıb.
  3. Rejected (rədd edilib): əməliyyat xəta ilə tamamlanıb.

Promisenin yaradılması

Promise Promise konstruktoru vasitəsilə yaradılır. Bu konstruktor bir executor function (icraedici funksiya) qəbul edir. Bu funksiya iki arqument qəbul edir: resolvereject. Bu funksiyanın içində asinxron kod yerinə yetirilir və uğurla tamamlanma halında resolve çağırılır, xəta halında isə reject çağırılır.

Syntax:

    
      const promise = new Promise((resolve, reject) => {
        // Asinxron əməliyyat
        if (/* uğurlu tamamlanma */) {
          resolve(value); // Uğur
        } else {
          reject(error); // Xəta
        }
      });
    
  

Promisenin yaradılmasına nümunə:

JavaScript
    
      const myPromise = new Promise((resolve, reject) => {
        const success = true; // Uğurlu yerinə yetirilmə şərti

        if (success) {
          resolve('Əməliyyat uğurla tamamlandı');
        } else {
          reject('Əməliyyat uğursuz oldu');
        }
      });
    
  

2.2 Promis-lərin istifadəsi

then metodu

then metodu promis-in uğurla icra olunmasını işləmək üçündür. Bu, iki funksiyanı qəbul edir: birincisi uğurlu icranı işləmək, ikincisi isə səhvləri işləmək üçün. Amma adətən səhvləri işləmək üçün catch metodu istifadə olunur.

then metodunun istifadəsinə nümunə:

JavaScript
    
      myPromise.then(
        (successMessage) => {
          console.log(successMessage); // Ekrana çıxacaq: Əməliyyat uğurlu oldu
        },
        (errorMessage) => {
          console.error(errorMessage); // Səhv olduqda bu çağırılacaq
        }
      );
    
  

catch metodu

catch metodu promis-in səhvlərini işləmək üçündür. Bu, yalnız bir funksiya qəbul edir və promis rədd edildikdə çağırılır.

catch metodunun istifadəsinə nümunə:

JavaScript
    
      myPromise
        .then((successMessage) => {
          console.log(successMessage);
        })
        .catch((errorMessage) => {
          console.error(errorMessage); // Çağırılacaq: Əməliyyat uğursuz oldu
        });
    
  

finally metodu

finally metodu, promis nəticəsindən (uğurlu ya da uğursuz) asılı olmayaraq kod icra etmək üçün istifadə olunur. Bu, heç bir argument qəbul etmir və promis icrası və ya rədd edilməsindən sonra hər zaman işləyir.

finally metodunun istifadəsinə nümunə:

JavaScript
    
      myPromise
        .then((successMessage) => {
          console.log(successMessage);
        })
        .catch((errorMessage) => {
          console.error(errorMessage);
        })
        .finally(() => {
          console.log('Əməliyyat tamamlandı'); // Hər zaman çağırılacaq
        });
    
  

2.3 Promise istifadə nümunələri

Nümunə 1: Promise istifadə edərək asinxron əməliyyat

Timer ilə asinxron əməliyyatın simulyasiyası.

JavaScript
    
      function asyncOperation() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const success = Math.random() > 0.5;

            if (success) {
              resolve('Asinxron əməliyyat uğurla tamamlandı');
            } else {
              reject('Asinxron əməliyyat uğursuz oldu');
            }
          }, 2000);
        });
      }

      asyncOperation()
        .then((message) => {
          console.log(message);
        })
        .catch((error) => {
          console.error(error);
        })
        .finally(() => {
          console.log('Asinxron əməliyyat tamamlandı');
        });
    
  

Nümunə 2: Promise'lərin ardıcıllıqla icrası

Ardıcıllıqla asinxron əməliyyatların simulyasiyası.

JavaScript
    
      function firstOperation() {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('Birinci əməliyyat tamamlandı');
            resolve('Birinci nəticə');
          }, 1000);
        });
      }

      function secondOperation(result) {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('İkinci əməliyyat tamamlandı');
            resolve(`İkinci nəticə, alındı: ${result}`);
          }, 1000);
        });
      }

      firstOperation()
        .then((result) => {
          return secondOperation(result);
        })
        .then((finalResult) => {
          console.log(finalResult);
        })
        .catch((error) => {
          console.error(error);
        })
        .finally(() => {
          console.log('Hər iki əməliyyat tamamlandı');
        });
    
  

Nümunə 3: Promise.all ilə paralel icra

Paralel asinxron əməliyyatların simulyasiyası.

JavaScript
    
      function operationOne() {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('Birinci əməliyyat tamamlandı');
            resolve('Birinci nəticə');
          }, 1000);
        });
      }

      function operationTwo() {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('İkinci əməliyyat tamamlandı');
            resolve('İkinci nəticə');
          }, 1500);
        });
      }

      Promise.all([operationOne(), operationTwo()])
        .then((results) => {
          console.log('Bütün əməliyyatlar tamamlandı');
          console.log(results); // Nəticə çıxaracaq: ['Birinci nəticə', 'İkinci nəticə']
        })
        .catch((error) => {
          console.error('Əməliyyatlardan biri uğursuz oldu', error);
        });
    
  
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION