Sobes.tech
Junior

Кайсы Promise түрлөрүн билесиң?

sobes.tech AI

AIден жооп

Node.js-деги негизги убада түрлөрү:

  • Негизги убада: Келечектеги маанилер же каталар үчүн контейнер. Үч абалы бар: pending (күтүүдө), fulfilled ( ийгиликтүү аткарылган), rejected (каталар менен четке кагылган). new Promise() конструктору аркылуу түзүлөт:

    // Негизги убада түзүү
    const myPromise = new Promise((resolve, reject) => {
      // Асинхрондук операция
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Операция ийгиликтүү аяктады");
        } else {
          reject("Ката чыкты");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Убакытта fulfilled абалына өтүүчү убада түзөт, белгилүү бир мааниге ээ:

    // Чечилген убада түзүү
    const resolvedPromise = Promise.resolve("Бул эми аткарылган убада");
    
  • Promise.reject(): Убакытта rejected абалына өтүүчү убада түзөт, катанын себеби менен:

    // Катталган убада түзүү
    const rejectedPromise = Promise.reject(new Error("Бул четке кагылган убада"));
    
  • Promise.all(): Убада массивин кабыл алып, жаңы убада кайтарат. Бардык убада ийгиликтүү аяктагандан кийин fulfilled абалына өтөт. Натыйжасы — массив, ал ошол эле тартипте болот. Эгер бир убада да катталса, биринчи катталган убада менен четке кагылат:

    // Promise.all() колдонуу
    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]
      })
      .catch((error) => {
        // Каталардын иштетилиши
      });
    
  • Promise.allSettled(): Убада массивин кабыл алып, жаңы убада кайтарат. Бардык убада аяктагандан кийин fulfilled же rejected абалына өтөт. Натыйжасы — объекттердин массиви, алардын ар бири убада натыйжасын сүрөттөйт:

    // Promise.allSettled() колдонуу
    const promiseA = Promise.resolve("жакшы");
    const promiseB = Promise.reject("каталар");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results — объекттердин массиви:
        // [{status: 'fulfilled', value: 'жакшы'}, {status: 'rejected', reason: 'каталар'}]
      });
    
  • Promise.race(): Убада массивин кабыл алып, биринчи аяктагандан кийин анын натыйжасы менен fulfilled же rejected абалына өтөт:

    // Promise.race() колдонуу
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Мен тезмин!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Мен жаймын..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value — "Мен тезмин!"
      });
    
  • Promise.any(): Убада массивин кабыл алып, биринчи ийгиликтүү аяктагандан кийин анын мааниси менен fulfilled абалына өтөт. Бардык убада катталса, AggregateError ката кайтарат, ал бардык катталган убада себептерин камтыйт. Бул функция Node.js 12ден баштап жеткиликтүү:

    // Promise.any() колдонуу
    const promiseFail1 = Promise.reject("Каталар 1");
    const promiseSuccess = Promise.resolve("Ийгилик!");
    const promiseFail2 = Promise.reject("Каталар 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value — "Ийгилик!"
      })
      .catch((error) => {
        // Бардык убада катталса, `AggregateError` иштетилет
      });