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 прави кода по-лесен за четене.