Sobes.tech
Middle+
27

/** * 'asyncAuth(callback)' функциясы callback-ты қабылдайды, оған * қате (бірінші аргумент ретінде) және * серверден алынған деректер (екінші аргумент ретінде) берілуі мүмкін. * asyncAuth((қате, деректер) => {}); * * Сіз 'auth()' функциясын жүзеге асыруыңыз керек, * ол 'asyncAuth()'-ты шақырады, бірақ Promise-ті қайтарады. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((қате, деректер) => { if (қате) { reject(қате) } else { resolve(деректер) } }); }) } /** * 'tryAuth()' функциясы 'auth()'-ты пайдаланады және қате болған жағдайда, * N қосымша әрекет жасайды. * Барлық әрекеттер сәтсіз болса - соңғы қатені қайтарады * * @returns {Promise} */ function tryAuth(n) { return new Promise((resolve, reject) => { function attempt(attemptsLeft) { auth().catch((қате) => { if (n <= 0) { // Әрекеттер аяқталды — соңғы қатені қайтарамыз return Promise.reject(қате); } // Әлі де әрекеттер бар — рекурсивті түрде n - 1-ге шақырамыз return tryAuth(n - 1); }); } }) }

Сұралған компаниялар
Яндекс

AI-дан жауап

sobes.tech AI

Сіздің tryAuth функцияңыз толық орындалмаған және қателер бар. Міне, түзетілген нұсқа, ол рекурсивті түрде auth() функциясын N ретке дейін орындауға тырысады және нәтижені немесе соңғы қателікті қайтарады:

function tryAuth(n) {
  return auth().catch(error => {
    if (n <= 0) {
      return Promise.reject(error);
    }
    return tryAuth(n - 1);
  });
}

Түсіндірме:

  • Алдымен, auth() шақырылады, ол Promise қайтарады.
  • Егер auth() сәтті болса, Promise нәтижемен шешіледі.
  • Егер қате болса, қалған әрекеттер бар-жоғын тексереміз (n > 0).
  • Егер әрекеттер қалса, tryAuth функциясын азайтылған әрекет санымен қайта шақырамыз.
  • Егер әрекеттер қалмаса, соңғы қателікті жібереміз.

Бұл тәсіл бірнеше рет авторизацияны қайталап орындауға мүмкіндік береді, ол сәттілікке жеткенше немесе әрекеттер саны таусылғанша.