Sobes.tech
Middle+

/** * Функцията `asyncAuth(callback)` приема callback, в който могат * да бъдат предадени грешка (като първи аргумент) и данни * от бекенда (като втори аргумент). * asyncAuth((error, data) => {}); * * Трябва да реализирате функцията `auth()`, * която извиква `asyncAuth()`, но връща Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * Функцията `tryAuth()` използва `auth()` и, в случай на грешка, * прави N допълнителни опита. * Ако всички се провалят, връща последната грешка. * * @returns {Promise} */ function tryAuth(n) { }

sobes.tech AI

Отговор от AI

Функцията tryAuth трябва да извика auth() и при грешка да опитва отново до N пъти. Ако всички опити се провалят, да върне последната грешка. Ето пример за реализация с използване на async/await:

async function tryAuth(n) {
  let lastError;
  for (let i = 0; i < n; i++) {
    try {
      const data = await auth();
      return data; // Успешен резултат
    } catch (error) {
      lastError = error; // Запаметяваме грешката
    }
  }
  throw lastError; // Всички опити се провалиха
}

Ако не искате да използвате async/await, може да го реализирате чрез верига от promises, но async/await прави кода по-лесен за четене.