等待结果再继续
wait for result before proceeding
我正在使用 Google 的 reCaptcha V3 作为我的 Angular(7) 项目的一部分。
我想等待令牌的响应,然后再继续执行其余代码并检查令牌是否已验证。
declare var grecaptcha: any;
ngOnInit() {
this.validateCaptcha();
if(this.gToken)
{
...
}
}
gToken:string;
validateCaptcha()
{
let self = this;
grecaptcha.ready(function() {
grecaptcha.execute('reCAPTCHA_site_key', {action: 'homepage'}).then(function(token){
self.gToken = token;
});
});
}
问题是 this.gToken
是未定义的,因为它不会等到 validateCaptcha
完成它的工作。
我也试过 async
和 await
但没有用。可能是我用错了。
你可以在这里使用 Promise。
您需要等待令牌生成。
您也可以使用 async / await 代替 Promise。
ngOnInit() {
this.validateCaptcha().then(token => { // Here wait token generated
if(token) {
}
})
}
validateCaptcha() {
return new Promise((res, rej) => {
grecaptcha.ready() => {
grecaptcha.execute('reCAPTCHA_site_key', {action:
'homepage'}).then((token) => {
return res(token);
})
})
})
}
使用 async / await 更新示例。
在使用 async / await 时,您的 validateCaptcha 方法保持不变(必须 return Promise)
async ngOnInit() { // async keyword added here
try {
let token = await this.validateCaptcha(); // await keyword added here
if(token) {
}
} catch(e) {
}
}
为什么没有 validateCaptcha() return 承诺?
declare var grecaptcha: any;
ngOnInit() {
this.validateCaptcha().then(() => {
if(this.gToken)
{
...
}
});
}
gToken:string;
validateCaptcha()
{
let self = this;
return new Promise((resolve, reject) => {
grecaptcha.ready(function() {
grecaptcha.execute('reCAPTCHA_site_key', {action: 'homepage'}).then(function(token){
self.gToken = token;
resolve();
});
});
});
}
我正在使用 Google 的 reCaptcha V3 作为我的 Angular(7) 项目的一部分。
我想等待令牌的响应,然后再继续执行其余代码并检查令牌是否已验证。
declare var grecaptcha: any;
ngOnInit() {
this.validateCaptcha();
if(this.gToken)
{
...
}
}
gToken:string;
validateCaptcha()
{
let self = this;
grecaptcha.ready(function() {
grecaptcha.execute('reCAPTCHA_site_key', {action: 'homepage'}).then(function(token){
self.gToken = token;
});
});
}
问题是 this.gToken
是未定义的,因为它不会等到 validateCaptcha
完成它的工作。
我也试过 async
和 await
但没有用。可能是我用错了。
你可以在这里使用 Promise。
您需要等待令牌生成。
您也可以使用 async / await 代替 Promise。
ngOnInit() {
this.validateCaptcha().then(token => { // Here wait token generated
if(token) {
}
})
}
validateCaptcha() {
return new Promise((res, rej) => {
grecaptcha.ready() => {
grecaptcha.execute('reCAPTCHA_site_key', {action:
'homepage'}).then((token) => {
return res(token);
})
})
})
}
使用 async / await 更新示例。
在使用 async / await 时,您的 validateCaptcha 方法保持不变(必须 return Promise)
async ngOnInit() { // async keyword added here
try {
let token = await this.validateCaptcha(); // await keyword added here
if(token) {
}
} catch(e) {
}
}
为什么没有 validateCaptcha() return 承诺?
declare var grecaptcha: any;
ngOnInit() {
this.validateCaptcha().then(() => {
if(this.gToken)
{
...
}
});
}
gToken:string;
validateCaptcha()
{
let self = this;
return new Promise((resolve, reject) => {
grecaptcha.ready(function() {
grecaptcha.execute('reCAPTCHA_site_key', {action: 'homepage'}).then(function(token){
self.gToken = token;
resolve();
});
});
});
}