Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
208 views
in Technique[技术] by (71.8m points)

javascript - How to capture Google recaptchaV3 Promise Timeout?

import canUseDOM from '@utils/dist/env/canUseDOM';

declare global {
  interface Window {
    grecaptcha: any;
  }
}

export default async function getRecaptchaTokenExplicit(params: { recaptchaClientId: number }) {
  return new Promise(resolve => {
    if (canUseDOM && window.grecaptcha) {
      const { recaptchaClientId } = params;

      window.grecaptcha.ready(() => {
        window.grecaptcha
          .execute(recaptchaClientId, {
            action: 'submit',
          })
          .then(function(token: string) {
            return resolve(token);
          });
      });
    } else {
      return resolve('');
    }
  });
}

Calling await above function, I used to get Timeout console error from recaptcha (found it was because of badge element get removed due to component rendering), but in order to avoid it, how do I capture it and resolve return empty string?

error looks like this: enter image description here

question from:https://stackoverflow.com/questions/65846643/how-to-capture-google-recaptchav3-promise-timeout

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Since the error is in the promise, have you tried to .catch() it?

window.grecaptcha
    .execute(recaptchaClientId, {
        action: 'submit',
    })
    .then(function(token: string) {
        resolve(token);
    })
    .catch(err => {
        console.error(err);
        resolve('');
    });

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...