如何捕获 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获取超时控制台错误(发现是因为组件渲染导致徽章元素被删除),但为了避免它,我如何捕获它并解决返回空字符串?

错误看起来像这样:

enter image description here

解决方法

既然错误在承诺中,你有没有尝试.catch()它?

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...