Sobes.tech
Назад к вопросам
Middle+
1

Какие статические методы Promise вы знаете помимо Promise.resolve? Чем Promise.all отличается от Promise.allSettled?

Компании, где спрашивали
Т-БанкТ-Банк

Ответ от нейросети

sobes.tech AI

Помимо Promise.resolve, существуют и другие статические методы Promise:

  • Promise.reject(reason) — создаёт промис, который сразу отклоняется с указанной причиной.
  • Promise.all(iterable) — принимает массив (или другой итерируемый объект) промисов и возвращает новый промис, который:
    • выполняется, когда все промисы из массива успешно выполнены, с массивом результатов.
    • отклоняется сразу, если хотя бы один из промисов отклоняется.
  • Promise.allSettled(iterable) — принимает массив промисов и возвращает промис, который выполняется, когда все промисы завершены (независимо от результата), с массивом объектов, описывающих результат каждого промиса (fulfilled или rejected).
  • Promise.race(iterable) — возвращает промис, который выполнится или отклонится, как только первый из переданных промисов выполнится или отклонится.
  • Promise.any(iterable) — возвращает промис, который выполнится с результатом первого успешно выполненного промиса, или отклонится, если все промисы отклонятся.

Отличие Promise.all от Promise.allSettled:

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

Пример:

Promise.all([
  Promise.resolve(1),
  Promise.reject('error'),
  Promise.resolve(3)
]).catch(console.log); // Выведет 'error'

Promise.allSettled([
  Promise.resolve(1),
  Promise.reject('error'),
  Promise.resolve(3)
]).then(console.log);
/* Выведет:
[
  { status: 'fulfilled', value: 1 },
  { status: 'rejected', reason: 'error' },
  { status: 'fulfilled', value: 3 }
]
*/