Promises (Խոստումներ)

"Ասինխրոն գործողությունների կառավարման ժամանակակից գործիքը։"

Promise-ը միշտ գտնվում է այս 3 վիճակներից մեկում.

  • Pending (Սպասում): Սկզբնական վիճակը, երբ գործողությունը դեռ չի ավարտվել։
  • Fulfilled / Resolved (Կատարված): Գործողությունը հաջողությամբ ավարտվել է։
  • Rejected (Մերժված): Տեղի է ունեցել սխալ։

5. Mermaid վիզուալիզացիա (Flow)

graph TD A[New Promise] e1@--> B{Pending} B e2@-->|Async Task Success| C[Resolved / Fulfilled] B e3@-->|Async Task Fail| D[Rejected] C e4@--> E[.then] D e5@--> F[.catch] E e6@--> G[.finally] F e7@--> G e1@{ animate: true } e2@{ animate: true } e3@{ animate: true } e4@{ animate: true } e5@{ animate: true } e6@{ animate: true } e7@{ animate: true } style B fill:#f1c40f,color:#000 style C fill:#2ecc71,color:#fff style D fill:#e74c3c,color:#fff

Promise ստեղծելու համար օգտագործում ենք new Promise կոնստրուկտորը, որը ստանում է երկու ֆունկցիա՝ resolve և reject:

const myPromise = new Promise((resolve, reject) => {
  const success = true;

  setTimeout(() => {
    if (success) {
      resolve("Տվյալները հաջողությամբ բեռնվեցին:");
    } else {
      reject("Սխալ տեղի ունեցավ:");
    }
  }, 2000);
});

// Օգտագործումը
myPromise
  .then(data => console.log(data))   // Եթե resolve եղավ
  .catch(err => console.error(err)) // Եթե reject եղավ
  .finally(() => console.log("Գործողությունն ավարտվեց:"));

Սա Promise-ի ամենահզոր կողմն է։ Մենք կարող ենք կապել մի քանի .then() իրար, և ամեն հաջորդը կստանա նախորդի վերադարձրած արժեքը։

fetch('https://api.example.com/user/1')
  .then(response => response.json()) // Վերադարձնում է նոր Promise
  .then(user => user.name)           // Վերցնում ենք անունը
  .then(name => console.log(name))   // Տպում ենք
  .catch(err => console.log(err));   // Մեկ catch-ը բավարար է ամբողջ շղթայի սխալները բռնելու համար

Երբ աշխատում ես մի քանի Promise-ների հետ միաժամանակ.

Promise.all()


Promise.all([p1, p2, p3])

Promise.allSettled()


Promise.allSettled([p1, p2])

Promise.race()


Promise.race([p1, p2])

Promise.any()


Promise.any([p1, p2])

Promise.resolve()


Promise.resolve(value)

Promise.reject()


Promise.reject(error)

Promise.withResolvers()


const { promise, resolve, reject } = Promise.withResolvers()

Promise.try()


Promise.try(() => func())

💡 Pro-Tip Masterclass-ի համար

Promise-ը չի վերացնում ասինխրոնությունը, այլ այն դարձնում է «կառավարելի»։ Սա կամուրջ է դեպի Async/Await, որը Promise-ի վրա կառուցված ավելի գեղեցիկ սինտաքս է։