CodeGym /Kurslar /Frontend SELF AZ /Xətaların işlənməsi

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

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

7.1 Callback-lərin istifadəsi

Xətaların emalı — etibarlı və dayanıqlı kod yazmağın vacib bir aspektidir. Asinxron JavaScript kodunda, xətalar həm sinxron, həm də asinxron əməliyyatlarda ortaya çıxa bilər. Xətaların düzgün idarə olunması gözlənilməz səhvlərin qarşısını almağa və istifadəçilərə faydalı səhv mesajları təqdim etməyə kömək edir. Asinxron kodda xətaların idarə olunması üçün bir neçə metod nəzərdən keçirək, bunlara callback-lər, promise-lər və async/await daxildir.

Promise-lər və async/await yarandıqdan əvvəl, asinxron kod çox vaxt callback-lərin istifadəsi ilə həyata keçirilirdi. Bu yanaşmada xətalar callback-ə ilk arqument kimi ötürülür.

Nümunə:

JavaScript
    
      function fetchData(callback) {
        setTimeout(() => {
          const error = Math.random() > 0.5 ? new Error('Məlumatları yükləmək alınmadı') : null;
          const data = error ? null : { id: 1, name: 'John Doe' };
          callback(error, data);
        }, 1000);
      }

      fetchData((error, data) => {
        if (error) {
          console.error('Xəta:', error);
        } else {
          console.log('Məlumatlar:', data);
        }
      });
    
  

7.2 Promise-lərin istifadəsi

Promise-lərlə xətaların işlənməsi

Promise-lər asinxron kodla işləmək üçün daha strukturlaşdırılmış bir yol təklif edir. Xətalar catch metodu ilə işlənir.

Nümunə:

JavaScript
    
      function fetchData() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const error = Math.random() > 0.5 ? new Error('Məlumatları əldə etmək alınmadı') : null;
            if (error) {
              reject(error);
            } else {
              resolve({ id: 1, name: 'John Doe' });
            }
          }, 1000);
        });
      }

      fetchData()
        .then(data => console.log('Məlumat:', data))
        .catch(error => console.error('Xəta:', error));
    
  

Async/await ilə xətaların işlənməsi

async/await asinxron kodla işləmək üçün sintaksis baxımından daha rahat bir yol təqdim edir, onu daha oxunaqlı və sinxron kod kimi görünən edir. Asinxron funksiyalarda xətalar try...catch strukturu ilə işlənə bilər.

Nümunə:

JavaScript
    
      async function fetchData() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const error = Math.random() > 0.5 ? new Error('Məlumatları əldə etmək alınmadı') : null;
            if (error) {
              reject(error);
            } else {
              resolve({ id: 1, name: 'John Doe' });
            }
          }, 1000);
        });
      }

      async function loadData() {
        try {
          const data = await fetchData();
          console.log('Məlumat:', data);
        } catch (error) {
          console.error('Xəta:', error);
        }
      }

      loadData();
    
  

7.3 Qlobal xətaların emalı

Asinxron kodda qlobal xətaların emalı üçün window.onErrorwindow.onUnhandledRejection istifadə edə bilərsən.

window.onError üçün nümunə:

JavaScript
    
      window.onerror = function (message, source, lineno, colno, error) {
        console.error('Qlobal xəta emalçısı:', error);
      };

      setTimeout(() => {
        throw new Error('Test xəta');
      }, 1000);
    
  

window.onunhandledrejection üçün nümunə:

JavaScript
    
      window.onunhandledrejection = function (event) {
        console.error('Emal olunmamış rejection:', event.reason);
      };

      Promise.reject(new Error('Test emal olunmamış rejection'));
    
  

7.4 İstifadə nümunələri

1. Fetch ilə asinxron HTTP sorğuları və hataların emalı:

JavaScript
    
      async function fetchData() {
        try {
          const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
          if (!response.ok) {
            throw new Error('Şəbəkə cavabı yaxşı olmadı');
          }
          const data = await response.json();
          console.log('Məlumat:', data);
        } catch (error) {
          console.error('Fetch hatası:', error);
        }
      }

      fetchData();
    
  

2. Promise.all ilə sorğuların paralel icrası və hataların emalı:

JavaScript
    
      async function fetchMultipleData() {
        try {
          const [response1, response2] = await Promise.all([
            fetch('https://jsonplaceholder.typicode.com/posts/1'),
            fetch('https://jsonplaceholder.typicode.com/posts/2')
          ]);

          if (!response1.ok || !response2.ok) {
            throw new Error('Cavablardan biri yaxşı olmadı');
          }

          const data1 = await response1.json();
          const data2 = await response2.json();

          console.log('Məlumat 1:', data1);
          console.log('Məlumat 2:', data2);
        } catch (error) {
          console.error('Birdən çox məlumatın alınması hatası:', error);
        }
      }

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