Sobes.tech
Junior

Ի՞նչ է Promise.race-ը։

sobes.tech AI

Պատասխան AI-ից

Promise.race — դա մեթոդ է, որը վերադարձնում է նոր խոստում (promise): Այս նոր խոստումը լուծվում է կամ մերժվում է նույն արժեքով (կամ պատճառով), ինչ առաջին խոստումը, որը փոխանցված է (հաճախ զանգվածի տեսքով), որը ավարտվել է:

Աշխատանքի սկզբունքները:

  1. Մուտք: Ընդունում է ինտերատոր (օրինակ, զանգված) խոստումների:
  2. Սպասում: Սկսում է "մրցույթ" բոլոր խոստումների միջև:
  3. Արդյունք: Երբ որևէ խոստում, որը փոխանցված է, ավարտվում է (լուծվում կամ մերժվում), Promise.race անմիջապես ավարտվում է նույն արդյունքով:
  4. Անտեսում: Բոլոր մյուս խոստումների արդյունքները, որոնք ավարտվում են ավելի ուշ, ամբողջությամբ անտեսվում են:

Օգտագործման օրինակ:

// Օրինակ խոստում, որը լուծվում է 1 վայրկյան հետո
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Առաջին'), 1000));

// Օրինակ խոստում, որը լուծվում է 500 միլիսեկունդ հետո
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Երկրորդ'), 500));

// Օրինակ խոստում, որը մերժվում է 300 միլիսեկունդ հետո
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Սխալ')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Ցուցադրում է 'Սխալ'
  })
  .catch((error) => {
    console.error(error.message); // Հաշվարկում է սխալը 'Սխալ'
  });

Այս օրինակով, promise3 ավարտվում է առաջինը (մերժվում), հետևաբար Promise.race ավարտվում է սխալով, և կատարվում է .catch բլոկը: Եթե promise2 ավարտվեր առաջինը (օրինակ, 10 միլիսեկունդում), ապա Promise.race կլուծվեր արժեքով 'Երկրորդ', և կկատարվեր .then բլոկը:

Տիպիկ օգտագործման սցենարներ՝

  • Ասինխրոն գործողության ժամանակային սահմանափակման իրականացում:
  • Ամենաարագ տվյալների աղբյուրից արդյունք ստացում՝ մի քանի հնարավորից:
  • Կոնկուրենտ ասինխրոն գործողությունների չեղարկում: