Sobes.tech
Junior

Paaiškinkite, kas yra Promise.race ir kaip jis naudojamas JavaScript.

sobes.tech AI

Atsakymas iš AI

Promise.race priima iteruojamą objektą pažadų ir grąžina naują pažadą. Šis naujas pažadas išsprendžiamas arba atmetamas, kai pirmas pažadas iš iteruojamo objekto yra išspręstas arba atmestas. Naujo pažado rezultatas bus pirmojo užbaigto pažado rezultatas arba priežastis.

Naudojama:

  • Pasirinkti greičiausią atsakymą iš kelių asinchroninių operacijų.
  • Įgyvendinti laiko limitus asinchroninėms operacijoms.

Pavyzdys su laiko limitu:

// Funkcija, kuri sukuria pažadą, kuris atmestas po tam tikro laiko
function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error(`Timeout after ${ms}ms`));
    }, ms);
  });
}

// Asinchroninė operacija, kuri gali būti lėta
function fetchData() {
  return new Promise(resolve => {
    // Ilgos operacijos simuliacija
    setTimeout(() => {
      resolve('Duomenys sėkmingai gauti');
    }, 2000); // Tarkime, ši operacija trunka 2 sekundes
  });
}

// Naudojant Promise.race pridėti laiko limitą prie fetchData
Promise.race([
  fetchData(),  // Mūsų operacija
  timeout(1000) // 1 sekundės laiko limitas
])
.then(result => {
  console.log(result); // Bus iškviečiama, jei fetchData baigsis iki laiko limito
})
.catch(error => {
  console.error(error.message); // Bus iškviečiama, jei pirmas įvykis bus laiko limitas
});