首页 > 解决方案 > Angular 2 异步验证器

问题描述

   isUnameTaken(formCtrl:FormControl): Promise<any>|Observable<any>{
    var status ;
    console.log(this.formGroup);

    this.http.post("http://localhost:3000/user/isAvaliable", { userName: formCtrl.value}).subscribe((resp:any)=>{
      console.log(resp);
       status = resp.status;
      console.log(status);
      if (status === 'success') {
        return Promise.resolve({ userExists: true });
      } else {
        return Promise.resolve(null);
      }
    });


  }

我的状态为未定义,因为发布请求需要时间来解决我试图解决使用 Promise.resolve 来返回承诺,所以如何以正确的方式等待响应

上面的函数是角度验证器函数

标签: angular

解决方案


您可以使用Observablesmap函数来转换 发出的值Observable,如下所示:

import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

// ...

return this.http.post("http://localhost:3000/user/isAvaliable", { userName: formCtrl.value }).pipe(
  map((resp: any) => {
    console.log(resp);
    status = resp.status;
    console.log(status);
    return status === 'success' ? { userExists: true } : null;
  })
);

推荐阅读