Sobes.tech
Junior

Kuo skiriasi async/await ir Promise?

sobes.tech AI

Atsakymas iš AI

async/await yra sintaksinis cukrus virš pažadų. Jis leidžia rašyti asinchroninį kodą aiškesniu, sinchroniniu stiliumi, naudojant raktinius žodžius async funkcijoms, kurių viduje naudojami await laukimo pažadai. Pažadai yra objektai, kurie atstovauja galutinį asinchroninės operacijos užbaigimą (arba nesėkmę) ir jos rezultatą.

Savybė async/await Promise
Sintaksė Panašesnė į sinchroninį kodą. Naudoja .then(), .catch(), .finally() metodus.
Skaitomumas Dažnai didesnis, ypač grandinėse. Gali sukelti "Callback hell" sudėtingose grandinėse.
Klaidų apdorojimas Naudoja standartinį try...catch. Naudoja .catch() arba antrąjį .then() argumentą.
Paralelizmas Reikalauja aiškios Promise.all() arba Promise.allSettled() naudojimo. Gali būti aiškesnis, bet mažiau skaitomas be async/await.
// Pavyzdys su Promise
function getDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Gauti duomenys');
    }, 1000);
  });
}

getDataPromise()
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });
// Pavyzdys su async/await
async function getDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Gauti duomenys');
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await getDataAsync();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

processData();