首页 > 解决方案 > 如何捕获 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('');
    }
  });
}

调用 await 上面的函数,我曾经从 recaptcha 得到 Timeout 控制台错误(发现这是因为徽章元素由于组件渲染而被删除),但是为了避免它,我如何捕获它并解决返回空字符串?

错误如下所示: 在此处输入图像描述

标签: javascriptreactjstypescriptrecaptcha-v3

解决方案


由于错误在承诺中,您是否尝试过.catch()

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

推荐阅读