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