Создание функции, возвращающей Promise вместо колбэка

Создайте Promise вокруг error-first callback. Повторяющая функция выполняет исходный вызов и максимум attempts дополнительных попыток; последняя ошибка остаётся rejection.

Короткий ответ

Что ответить на собеседовании

Создайте Promise вокруг error-first callback. Повторяющая функция выполняет исходный вызов и максимум attempts дополнительных попыток; последняя ошибка остаётся rejection.

Подробный разбор

Ответ с пояснениями

Условие

Функция asyncAuth(cb) принимает колбэк, в который передаётся возможная ошибка (первый параметр) и данные, полученные от сервера (второй параметр). asyncAuth((err, result) => {}); Ваша задача — реализовать функцию auth(), которая внутри вызывает asyncAuth, но вместо использования колбэка возвращает Promise. @returns {Promise} function auth() { // asyncAuth((err, result) => {}); }

Функция tryAuth() должна использовать auth() и при возникновении ошибки выполнять ещё N дополнительных попыток. Если после всех попыток ошибка остаётся, необходимо отклонить промис с последней полученной ошибкой. @returns {Promise} function tryAuth(attempts) { }

Ответ

Создайте Promise вокруг error-first callback. Повторяющая функция выполняет исходный вызов и максимум attempts дополнительных попыток; последняя ошибка остаётся rejection.

function auth() {
  return new Promise((resolve, reject) => {
    asyncAuth((error, result) => {
      if (error != null) reject(error);
      else resolve(result);
    });
  });
}
async function tryAuth(attempts) {
  if (!Number.isInteger(attempts) || attempts < 0) throw new RangeError('Некорректные попытки');
  for (let i = 0; ; i++) {
    try { return await auth(); }
    catch (error) { if (i === attempts) throw error; }
  }
}

Контракт считает null/undefined отсутствием ошибки. При attempts=2 возможны три вызова. Немедленный успешный результат прекращает повторы. Для реального сервиса добавляют backoff и повторяют лишь временные ошибки, а не неверные учётные данные.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее