Sobes.tech
Junior

Обяснете какво е Promise.race и как се използва в JavaScript.

sobes.tech AI

Отговор от AI

Promise.race приема итеративен обект от обещания и връща ново обещание. Това ново обещание се разрешава или отхвърля веднага щом първото обещание в итеративния обект се разреши или отхвърли. Резултатът от новото обещание ще бъде резултатът или причината за отхвърляне на първото завършило обещание.

Използва се за:

  • Избиране на най-бързия отговор сред няколко асинхронни операции.
  • Реализиране на таймаути за асинхронни операции.

Пример за таймаут:

// Функция, която създава обещание, което се отхвърля след определено време
function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error(`Timeout след ${ms}ms`));
    }, ms);
  });
}

// Асинхронна операция, която може да бъде бавна
function fetchData() {
  return new Promise(resolve => {
    // Имитация на дълга операция
    setTimeout(() => {
      resolve('Данните са успешно получени');
    }, 2000); // Предположим, че тази операция отнема 2 секунди
  });
}

// Използване на Promise.race за добавяне на таймаут към fetchData
Promise.race([
  fetchData(),  // Нашата операция
  timeout(1000) // Таймаут от 1 секунда
])
.then(result => {
  console.log(result); // Ще се изпълни, ако fetchData приключи преди таймаута
})
.catch(error => {
  console.error(error.message); // Ще се изпълни, ако таймаутът се случи първи
});