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 з зададзеным значэннем.

    // Стварэнне resolved праміса
    const resolvedPromise = Promise.resolve("Гэта ўжо выкананы праміс");
    
  • Promise.reject(): Стварае праміс, які неадкладна пераходзіць у стан rejected з зададзенай прычынай памылкі.

    // Стварэнне rejected праміса
    const rejectedPromise = Promise.reject(new Error("Гэта адхілены праміс"));
    
  • Promise.all(): Прымае масіў прамісаў і вяртае новы праміс. Гэты новы праміс пераходзіць у стан fulfilled, калі усе прамісы ў масіве паспяхова завершаны. Значэннем будзе масіў вынікаў у тым жа парадку, што і ўваходныя прамісы. Калі любы праміс у масіве не выконваецца, Promise.all() неадкладна адхіляецца з прычынай першага невыкананага праміса.

    // Выкарыстанне 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, калі ўсе прамісы ў масіве або паспяхова завершаны (fulfilled), або адхілены (rejected). Значэннем будзе масіў аб'ектаў, якія апісваюць вынік кожнага праміса (стан і значэнне/прычына). У адрозненне ад Promise.all(), не адразу не адхіляецца.

    // Выкарыстанне 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 з значэннем першага праміса з масіва, які паспяхова завершаны. Калі усе прамісы ў масіве неўдачлівыя, Promise.any() верне памылку 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, калі ўсе прамісы неўдачлівыя
      });