Sobes.tech
Middle

Ինչպե՞ս կարելի է լուծել withTimeout առաջադրանքը այլընտրանքային կերպով՝ Promise.race-ի միջոցով: Ինչ է Promise.race-ը, ինչպե՞ս է այն տարբերվում Promise.all-ից:

sobes.tech AI

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

Promise.race — это метод, который принимает массив промисов и возвращает новый промис, который выполнится или отклонится, как только первый из переданных промисов завершится (успешно или с ошибкой).

Promise.all же ждёт, пока все промисы из массива завершатся успешно, и возвращает массив результатов. Если хотя бы один промис отклоняется, Promise.all сразу отклоняется.

Чтобы реализовать withTimeout через Promise.race, можно "соревновать" основной промис с промисом таймаута, который отклонится через заданное время:

function withTimeout(promise, ms) {
  const timeout = new Promise((_, reject) => {
    setTimeout(() => reject(new Error('Timeout')), ms);
  });
  return Promise.race([promise, timeout]);
}

Таким образом, если promise не успеет завершиться за ms миллисекунд, withTimeout отклонится с ошибкой таймаута.