Sobes.tech
Middle

Ինչպե՞ս եք աշխատում ասինխրոն JavaScript-ով։

sobes.tech AI

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

Ես աշխատում եմ ասինխրոնությամբ JavaScript-ում օգտագործելով callback-ներ, promise-ներ և async/await:

Callback-ները ֆունկցիաներ են, որոնք փոխանցվում են այլ ֆունկցիաների որպես արգումենտներ և կատարվում են որոշակի օպերացիայի ավարտից հետո: Նրանք կարող են հանգեցնել "տանջալի callback-ների" երբ նեղվում են:

// Callback-ի օրինակ
function fetchData(callback) {
  setTimeout(() => {
    callback("Տվյալները ստացվել են");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // Տպում է "Տվյալները ստացվել են" 1 վայրկյանի ընթացքում
});

Promise-ները օբյեկտներ են, որոնք ներկայացնում են ասինխրոն օպերացիայի վերջնական ավարտը կամ անհաջողությունը: Նրանք հեշտացնում են ասինխրոն կոդի աշխատանքը, թույլ են տալիս խուսափել խորացված նեղումից: Ունեն երեք վիճակ՝ pending (սպասում), fulfilled (հաջող ավարտ), rejected (բացառված):

// Promise-ի օրինակ
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Տվյալները ստացվել են");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // Տպում է "Տվյալները ստացվել են" 1 վայրկյանի ընթացքում
  })
  .catch((error) => {
    console.error("Սխալ:", error);
  });

Async/await-ը սինտաքսիկ շաքար է, որը դարձնում է ասինխրոն կոդը ավելի ընթեռնելի, նման է սինխրոնային: async նշված ֆունկցիան միշտ վերադարձնում է promise: await օպերատորը կարող է օգտագործվել միայն async ֆունկցիայի ներսում և կանգնեցնում է կատարմանը մինչև promise-ը կատարվի կամ մերժվի:

// Async/await-ի օրինակ
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Տվյալները ստացվել են");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // Տպում է "Տվյալները ստացվել են" 1 վայրկյանի ընթացքում
  } catch (error) {
    console.error("Սխալ:", error);
  }
}

processData();

Կանոնավոր օգտագործում եմ async/await API հարցումների ժամանակ, քանի որ դա ամենահարմար և ընթեռնելի միջոց է ասինխրոն օպերացիաները մշակելու համար: Երբ անհրաժեշտ է միաժամանակ մի քանի ասինխրոն օպերացիա կատարել, օգտագործում եմ Promise.all() կամ Promise.allSettled():

Օգտագործում եմ event loop-ը՝ հասկանալու համար ասինխրոն կոդի կատարման կարգը, microtasks-ները և macrotasks-ները։