Sobes.tech
Junior

Await istifadə edərkən vədin (reject) səhvini necə işləyə bilərsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

await ilə promiss istifadə edərkən, səhvlər (reject) bir neçə yolla idarə oluna bilər:

  1. try...catch quruluşu: Ən çox yayılmış və tövsiyə olunan üsul. Bu, promissin həll olunması (resolve) və ya rədd olunması (reject) zamanı atılan səhvi şık şəkildə tutmağa imkan verir.

    async function fetchData() {
      try {
        const response = await fetch('https://api.example.com/data');
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json();
        console.log(data);
      } catch (error) {
        console.error('Məlumatların alınmasında xəta:', error);
        // Əlavə xəta emalı və ya istifadəçiyə bildiriş
      }
    }
    
    fetchData();
    
  2. .catch() metodu await sonrası: Daha az üstünlük verilən, amma mümkün variantdır. Əgər promiss rədd olunarsa, .catch() içindəki callback-də xəta idarə olunacaq.

    async function fetchData() {
      const response = await fetch('https://api.example.com/data')
        .catch(error => {
          console.error('Fetch icrasında xəta:', error);
          // Fetch xəta emalı
          throw error; // Daha sonra emal üçün xətanı ötürürük
        });
    
      if (response && !response.ok) {
           console.error(`HTTP error! status: ${response.status}`);
           // HTTP xəta emalı
      }
    
      if (response && response.ok) {
          const data = await response.json()
              .catch(error => {
                  console.error('JSON parse xəta:', error);
                  // JSON parse xəta emalı
              });
          if (data) {
              console.log(data);
          }
      }
    }
    
    fetchData();
    

    Bu yanaşma çoxsaylı potensial uğursuzluq nöqtələrində mürəkkəb ola bilər.

  3. Xəta ilə birlikdə dəyər qaytarmaq: Bəzi kitabxanalar və ya öz funksiyalar [məlumat, xəta] cütlüyü qaytarır, promissin rədd olunması yerinə.

    async function safelyFetchData() {
       const [data, error] = await safePromise(fetch('https://api.example.com/data'));
       if (error) {
          console.error('Ümumi məlumat alma xəta:', error);
          return null; // və ya başqa bir uğursuzluğu göstərən dəyər
       }
       // safePromise response.ok-u da emal edir
       console.log(data);
       return data;
    }
    
    // safePromise-nin sadə implementasiyası nümunəsi
    async function safePromise(promise) {
        try {
            const result = await promise;
             // burada result.ok yoxlaması ola bilər, məsələn fetch üçün
             if (result && result.ok !== undefined && !result.ok) {
                 throw new Error(`HTTP error! status: ${result.status}`);
             }
            // fetch üçün, ehtiyac olarsa, await result.json()
            if (result && typeof result.json === 'function') {
                const jsonData = await result.json();
                return [jsonData, null];
            }
            return [result, null];
        } catch (error) {
            return [null, error];
        }
    }
    
    safelyFetchData();
    

    Bu nümunə (tez-tez "error-first callback" və ya "go-style error handling" adlanır) funksiyanın icrasını pozmadan xətaları lokal şəkildə emal etmək üçün əlverişlidir.

Ən təmiz və oxunaqlı üsul isə try...catch blokunu await olan kod bloku ətrafında istifadə etməkdir.