Sobes.tech
Junior

Hansı Promise növlərini bilirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Node.js-də əsas növ vədinlər:

  • Əsas Vəd: Gələcək dəyərlər və ya səhvlər üçün konteynerdir. Üç vəziyyəti var: pending (gözləmə), fulfilled (uğurla tamamlandı), rejected (xəta ilə rədd edildi). new Promise() konstruktoru ilə yaradılır.

    // Əsas vədin yaradılması
    const myPromise = new Promise((resolve, reject) => {
      // Asinxron əməliyyat
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Əməliyyat uğurla tamamlandı");
        } else {
          reject("Xəta baş verdi");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Dərhal fulfilled vəziyyətinə keçən vədi yaradır.

    // Həll olunmuş vədin yaradılması
    const resolvedPromise = Promise.resolve("Artıq yerinə yetirilmiş vəddir");
    
  • Promise.reject(): Dərhal rejected vəziyyətinə keçən vədi yaradır.

    // Rədd edilmiş vədin yaradılması
    const rejectedPromise = Promise.reject(new Error("Rədd edilmiş vəddir"));
    
  • Promise.all(): Vahid array vəd qəbul edir və yeni vəd qaytarır. Bu yeni vəd, bütün arraydakı vədlər uğurla tamamlandıqda fulfilled vəziyyətinə keçir. Nəticələr array şəklində, giriş vədlərinin ardıcıllığında olacaq. Əgər hər hansı vəddən biri rədd edilərsə, Promise.all() dərhal rədd edilir.

    // Promise.all() istifadə
    const promise1 = Promise.resolve(1);
    const promise2 = Promise.resolve(2);
    const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100));
    Promise.all([promise1, promise2, promise3])
      .then((values) => {
        // values [1, 2, 3] olacaq
      })
      .catch((error) => {
        // Xəta emalı
      });
    
  • Promise.allSettled(): Vahid array vəd qəbul edir və yeni vəd qaytarır. Bu yeni vəd, bütün vədlər uğurla tamamlandıqda və ya rədd edildikdə fulfilled vəziyyətinə keçir. Nəticələr, hər bir vədin nəticəsini təsvir edən obyektlərdən ibarət array olacaq (vəziyyət və dəyər/ səbəb). Promise.all()-dan fərqli olaraq, dərhal rədd edilmir.

    // Promise.allSettled() istifadə
    const promiseA = Promise.resolve("uğur");
    const promiseB = Promise.reject("xəta");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results obyektlər array olacaq:
        // [{status: 'fulfilled', value: 'uğur'}, {status: 'rejected', reason: 'xəta'}]
      });
    
  • Promise.race(): Vahid array vəd qəbul edir və yeni vəd qaytarır. Bu yeni vəd, ilk tamamlanan və ya rədd edilən vədin nəticəsi və ya səbəbi ilə fulfilled və ya rejected vəziyyətinə keçir.

    // Promise.race() istifadə
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Mən sürətliyəm!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Mən yavaşam..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value "Mən sürətliyəm!" olacaq
      });
    
  • Promise.any(): Vahid array vəd qəbul edir və yeni vəd qaytarır. Bu vəd, uğurla tamamlanan ilk vədin dəyəri ilə fulfilled vəziyyətinə keçir. Əgər bütün vədlər rədd edilərsə, Promise.any() AggregateError xətası qaytarır, hansı ki, bütün rədd edilən vədlərin səbəblərini ehtiva edir. Node.js 12-dən etibarən mövcuddur.

    // Promise.any() istifadə
    const promiseFail1 = Promise.reject("Xəta 1");
    const promiseSuccess = Promise.resolve("Uğur!");
    const promiseFail2 = Promise.reject("Xəta 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value "Uğur!" olacaq
      })
      .catch((error) => {
        // Bütün vədlər rədd edilərsə, AggregateError emalı
      });