Sobes.tech
Junior

Qaysi Promise turlarini bilasiz?

sobes.tech AI

AIdan javob

Node.js da katta promiss turlari:

  • Basic Promise: Bu kelajakdagi qiymatlar yoki xatoliklar uchun konteyner. U uch holatda bo'ladi: pending (kutilmoqda), fulfilled (muvaffaqiyatli bajarildi), rejected (rad etildi). new Promise() konstruktor yordamida yaratiladi.

    // Asosiy promiss yaratish
    const myPromise = new Promise((resolve, reject) => {
      // Asinxron operatsiya
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operatsiya muvaffaqiyatli yakunlandi");
        } else {
          reject("Xatolik yuz berdi");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Darhol fulfilled holatiga o'tadigan va berilgan qiymat bilan ishlaydigan promiss yaratadi.

    // Yechilgan promiss yaratish
    const resolvedPromise = Promise.resolve("Bu allaqachon yechilgan promiss");
    
  • Promise.reject(): Darhol rejected holatiga o'tadigan va xato sababi bilan ishlaydigan promiss yaratadi.

    // Rad etilgan promiss yaratish
    const rejectedPromise = Promise.reject(new Error("Bu rad etilgan promiss"));
    
  • Promise.all(): Promisslar ro'yxatini qabul qiladi va yangi promiss qaytaradi. Bu barcha promisslar muvaffaqiyatli yakunlanganda fulfilled holatiga o'tadi. Qiymat, kirish promisslar bilan bir xil tartibda natijalar massividir. Agar biron promiss rad etilsa, Promise.all() darhol rad etiladi va rad etish sababi birinchi rad etilgan promiss bilan bo'ladi.

    // Promise.all() dan foydalanish
    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] bo'ladi
      })
      .catch((error) => {
        // Xatolarni boshqarish
      });
    
  • Promise.allSettled(): Promisslar ro'yxatini qabul qiladi va yangi promiss qaytaradi. Bu barcha promisslar yakunlanganda fulfilled yoki rejected holatiga o'tadi. Qiymat, har bir promissning natijasini tavsiflovchi obyektlar massividir (holat va qiymat/sababi). Promise.all() dan farqli o'laroq, darhol rad etilmaydi.

    // Promise.allSettled() dan foydalanish
    const promiseA = Promise.resolve("muvaffaqiyat");
    const promiseB = Promise.reject("xato");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results obyektlar massividir:
        // [{status: 'fulfilled', value: 'muvaffaqiyat'}, {status: 'rejected', reason: 'xato'}]
      });
    
  • Promise.race(): Promisslar ro'yxatini qabul qiladi va yangi promiss qaytaradi. Birinchi yakunlangan promissning natijasi/sababi bilan fulfilled yoki rejected holatiga o'tadi.

    // Promise.race() dan foydalanish
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Men tezman!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Men sekinman..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value "Men tezman!" bo'ladi
      });
    
  • Promise.any(): Promisslar ro'yxatini qabul qiladi va yangi promiss qaytaradi. Birinchi muvaffaqiyatli yakunlangan promissning qiymati bilan fulfilled holatiga o'tadi. Agar barchasi rad etilsa, Promise.any() AggregateError xatosini qaytaradi, bu xato barcha rad etilgan promisslarning sabablari bilan bo'ladi. Node.js 12 dan boshlab mavjud.

    // Promise.any() dan foydalanish
    const promiseFail1 = Promise.reject("Xato 1");
    const promiseSuccess = Promise.resolve("Muvaffaqiyat!");
    const promiseFail2 = Promise.reject("Xato 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value "Muvaffaqiyat!" bo'ladi
      })
      .catch((error) => {
        // AggregateError ni boshqarish, agar hamma promisslar rad etilsa
      });