首页 > 解决方案 > Angular - 异步响应式表单验证器的问题

问题描述

我遇到的问题是我想调用一个对 API 进行 http 调用的服务,并检查给定的用户名是否存在。

来自 Auth 的代码:

usernameCheck(username: string){ return this.http.get(this.baseUrl + "usernamecheck?username=" + username); }

来自控制器的代码:

async usernameExistsValidator(g: FormGroup){
const username = g.get("username").value;
let username_exists: boolean;
if(username){
  await this.authService.usernameCheck(username).toPromise()
    .then(
      (res : any) => {
        username_exists = res.exists;
      }
    )
  console.log(username_exists)
  return username_exists ? { usernameExistsError: true } : null; 
}

主要问题是我得到了正确的 console.log 值,但返回什么也没做。

标签: angulartypescriptvalidationasynchronousangular-reactive-forms

解决方案


暂停直到 promise 用await解决,所以改变这个

await this.authService.usernameCheck(username).toPromise()
    .then(
      (res : any) => {
        username_exists = res.exists;
      }
    )
  console.log(username_exists)

经过

   const res = await this.authService.usernameCheck(username).toPromise()

   username_exists = res.exists;

   console.log(username_exists)

推荐阅读