Sobes.tech
Junior

պատմիր ինձ մասին async/await կառուցվածքի մասին JavaScript-ում։

sobes.tech AI

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

async/await — սինտաքսիկային շաքար է promises-ի վրա, որը նախատեսված է ավելի պարզ գրել ասինխրոնային կոդ, որը տեսք ունի սինխրոն։

Ֆունկցիան, նշված բառով async, միշտ վերադարձնում է promise։ async ֆունկցիայի ներսում կարելի է օգտագործել await բանալի բառը։

Օպերատոր await-ը օգտագործվում է promise-ի կանչից առաջ։ Այն կանգնեցնում է async ֆունկցիայի կատարմանը մինչև որ promise-ը լուծվի (resolved) կամ մերժվի (rejected)։ Promise-ի արդյունքը (հաջողություն կամ սխալ) վերադարձվում է await-ով։

Եթե await-ով նշված promise-ը մերժվի, դա առաջացնում է արտահայտություն, որը կարելի է բռնել try...catch բլոկով։

// Օրինակ `async/await`-ի օգտագործման
async function fetchData() {
  try {
    // Կատարման սպասում է ասինխրոնային օպերացիայի (օր. API հարցում)
    const response = await fetch('https://api.example.com/data');
    // Պատասխանն անալիզացնում ենք JSON-ով
    const data = await response.json();
    // Տվյալները ցուցադրում ենք
    console.log(data);
  } catch (error) {
    // Հնարավոր սխալը բռնում ենք
    console.error('Սխալ տվյալների ստացման ժամանակ:', error);
  }
}

// Կոչ ենք անում `async` ֆունկցիան
fetchData();

// `async` ֆունկցիա, որը վերադարձնում է promise
async function getValue() {
  return 10; // Սա ավտոմատ կերպով փաթեթավորվում է Promise.resolve(10)
}

getValue().then(value => console.log(value)); // Ցուցադրում է 10

async/await-ի առավելությունները՝

  • Կոդի ընթերցելիություն: Ասինխրոնային կոդը ավելի շատ նման է սինխրոնին
  • Սխալների կառավարում: Հեշտ է օգտագործել ստանդարտ try...catch բլոկներով
  • Փոքր ներսի մակարդակ: Խուսափում է "callback-ների դժոխքից" կամ երկար շղթաներից .then()

Կարևոր է հիշել, որ await-ը կարող է օգտագործվել միայն async ֆունկցիաների ներսում։