问题描述
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获取超时控制台错误(发现是因为组件渲染导致徽章元素被删除),但为了避免它,我如何捕获它并解决返回空字符串?
错误看起来像这样:
解决方法
既然错误在承诺中,你有没有尝试.catch()
它?
window.grecaptcha
.execute(recaptchaClientId,{
action: 'submit',})
.then(function(token: string) {
resolve(token);
})
.catch(err => {
console.error(err);
resolve('');
});