Middle+
/** * `asyncAuth(callback)` funkcija priima callback, į kurį * gali būti perduota klaida (pirmas argumentas) ir duomenys * iš backend'o (antras argumentas). * asyncAuth((error, data) => {}); * * Jums reikia įgyvendinti `auth()` funkciją, * kuri kviečia `asyncAuth()`, bet grąžina Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * `tryAuth()` funkcija naudoja `auth()` ir, jei įvyksta klaida, * atlieka N papildomų bandymų. * Jei visi bandymai nepavyksta, grąžina paskutinę klaidą. * * @returns {Promise} */ function tryAuth(n) { }
sobes.tech AI
Atsakymas iš AI
tryAuth funkcija turi iškviesti auth() ir, jei įvyksta klaida, bandyti dar N kartų. Jei visi bandymai nepavyksta, grąžinti paskutinę klaidą. Štai pavyzdys, kaip tai įgyvendinti naudojant async/await:
async function tryAuth(n) {
let lastError;
for (let i = 0; i < n; i++) {
try {
const data = await auth();
return data; // Sėkmingas rezultatas
} catch (error) {
lastError = error; // Išsaugoti klaidą
}
}
throw lastError; // Visi bandymai nepavyko
}
Jei nenorite naudoti async/await, galite tai įgyvendinti naudojant pažadų grandinę, tačiau async/await daro kodą lengviau skaitomą.