CodeGym /Kurslar /Frontend SELF AZ /Promise zəncirləri

Promise zəncirləri

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

3.1 Promise zəncirlərinin yaradılması

Promise zəncirləri bir neçə asinxron əməliyyatı ardıcıl icra etməyə, bir əməliyyatın nəticəsini növbəti əməliyyata ötürməyə imkan verir. Bu, kodu daha oxunaqlı və idarə olunan edir. Bundan əlavə, promise-lər səhvlərin işlənməsi üçün güclü imkanlar təmin edir ki, bu da etibarlı və sabit tətbiqlər yaratmağa imkan verir.

Əsas konsepsiya

Promise zənciri then metodundan yeni promise qaytarmaqla yaradılır. Hər bir then metodu yeni promise qaytarır ki, bu da ardıcıl asinxron əməliyyatlar qurmağa imkan verir.

Sadə promise zənciri nümunəsi

Bu nümunədə hər bir then metodu öz əməliyyatını yerinə yetirir və nəticəni növbəti then metoduna ötürür.

JavaScript
    
      const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('Addım 1 tamamlandı');
        }, 1000);
      });

      promise
        .then((result) => {
          console.log(result); // Çıxaracaq: Addım 1 tamamlandı
          return 'Addım 2 tamamlandı';
        })
        .then((result) => {
          console.log(result); // Çıxaracaq: Addım 2 tamamlandı
          return 'Addım 3 tamamlandı';
        })
        .then((result) => {
          console.log(result); // Çıxaracaq: Addım 3 tamamlandı
        })
        .catch((error) => {
          console.error(error);
        });
    
  

Asinxron əməliyyatlarla promise zənciri nümunəsi

Bu nümunədə hər bir then metodu növbəti addımı yerinə yetirməzdən əvvəl asinxron əməliyyatın bitməsini gözləyir:

JavaScript
    
      function asyncOperation(step) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            resolve(`${step} tamamlandı`);
          }, 1000);
        });
      }

      asyncOperation('Addım 1')
        .then((result) => {
          console.log(result); // Çıxaracaq: Addım 1 tamamlandı
          return asyncOperation('Addım 2');
        })
        .then((result) => {
          console.log(result); // Çıxaracaq: Addım 2 tamamlandı
          return asyncOperation('Addım 3');
        })
        .then((result) => {
          console.log(result); // Çıxaracaq: Addım 3 tamamlandı
        })
        .catch((error) => {
          console.error(error);
        });
    
  

3.2 Promise zəncirlərində xətaların işlənməsi

catch metodu promise zəncirində xətaların işlənməsi üçün istifadə olunur. Əgər hər hansı bir promisede xəta yaranırsa, o ən yaxın catch metoduna ötürülür. Bu, xətaları mərkəzləşdirilmiş şəkildə işləməyə, kodun oxunaqlığını və dəstəyini yaxşılaşdırmağa imkan verir.

Xətaların işlənməsi nümunəsi

Bu nümunədə Step 2-də yaranan xəta catch metodu ilə saxlanılır və sonrakı then metodları icra olunmur:

JavaScript
    
      function asyncOperation(step, shouldFail = false) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            if (shouldFail) {
              reject(`${step} failed`);
            } else {
              resolve(`${step} completed`);
            }
          }, 1000);
        });
      }

      asyncOperation('Step 1')
        .then((result) => {
          console.log(result);
          return asyncOperation('Step 2', true); // Bu əməliyyat xətayla tamamlanacaq
        })
        .then((result) => {
          console.log(result); // Bu kod işləməyəcək
          return asyncOperation('Step 3');
        })
        .then((result) => {
          console.log(result); // Bu kod işləməyəcək
        })
        .catch((error) => {
          console.error('Xəta:', error); // Çıxış: Xəta: Step 2 failed
        });
    
  

Xətaların xüsusi addımlarda işlənməsi

Bəzən zəncirin icrasını dayandırmadan, müəyyən addımlarda xətaları işləkmək lazımdır. Bunun üçün iç-içə thencatch metodlarından istifadə etmək olar.

Xüsusi addımlarda xətaların işlənməsi nümunəsi

Bu nümunədə Step 2-dəki xəta lokal olaraq işlənir və zəncir bərpa edilmiş dəyərlə davam edir:

JavaScript
    
      function asyncOperation(step, shouldFail = false) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            if (shouldFail) {
              reject(`${step} failed`);
            } else {
              resolve(`${step} completed`);
            }
          }, 1000);
        });
      }
            
      asyncOperation('Step 1')
        .then((result) => {
          console.log(result);
          return asyncOperation('Step 2', true).catch((error) => {
            console.warn('Step 2-də xətanın işlənməsi:', error);
            return 'Step 2 xətasından sonra bərpa edildi';
          });
        })
        .then((result) => {
          console.log(result); // Çıxış: Step 2 xətasından sonra bərpa edildi
          return asyncOperation('Step 3');
        })
        .then((result) => {
          console.log(result); // Çıxış: Step 3 completed
        })
        .catch((error) => {
          console.error('Xəta:', error); // Bu kod işləməyəcək
        });
    
  

3.3 finally istifadə etmək

finally metodu, Promise uğurla tamamlanıb-tamamlanmamasına baxmayaraq kodu icra etmək üçün istifadə olunur. Bu metod, resursların təmizlənməsi kimi yekun fəaliyyətlər üçün faydalıdır.

finally istifadə nümunəsi:

JavaScript
    
      function asyncOperation(step, shouldFail = false) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            if (shouldFail) {
              reject(`${step} uğursuz oldu`);
            } else {
              resolve(`${step} tamamlandı`);
            }
          }, 1000);
        });
      }
      
      asyncOperation('Step 1')
        .then((result) => {
          console.log(result);
          return asyncOperation('Step 2');
        })
        .then((result) => {
          console.log(result);
          return asyncOperation('Step 3');
        })
        .catch((error) => {
          console.error('Xəta:', error);
        })
        .finally(() => {
          console.log('Bütün əməliyyatlar tamamlandı'); // Hər bir halda icra olunacaq
        });
    
  

Bu nümunədə, finally metodu hər bir halda, xəta baş verib-verməməsindən asılı olmayaraq icra olunur.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION