订阅Observable <type>

时间:2018-03-20 08:20:29

标签: javascript angular typescript rxjs observable

订阅Observable:

checkAllowEmail(control: FormControl) {
    this.userService.getUserByEmail(control.value)
     .subscribe((user: UserDto) => {
       console.log(user);
       if (user !== undefined) {
         console.log(this.isAllowEmail);
         this.isAllowEmail = false;
         console.log(this.isAllowEmail);
       }
     });
  }

从方法返回Observable:

getUserByEmail(email: string): Observable<UserDto> {
    return this.http.get(`http://localhost:9092/api/v1/users?email=${email}`)
      .map((response: Response) => response.json())
      .map((user: UserDto) => user ? user : undefined);
  }

Class UserDto:

export class UserDto {
  constructor(
    public email: string,
    public name: string,
    public role: string
  ) {}
}

来自BE方面的回应:

{"name":"art","email":"art@mail.ru","role":"user"}

为什么我可以在checkAllowEmail方法的if语句中将变量isAllowEmail更改为false?

1 个答案:

答案 0 :(得分:0)

在使用HttpClient时,我不认为你仍然需要使用map函数(因为角度版本4)。尝试使用

getUserByEmail(email: string): Observable<UserDto> {
    return this.http.get<UserDto>(`http://localhost:9092/api/v1/users?email=${email}`);
}

否则请使用Postman甚至curl等控制台来验证你api是否返回正确/预期的响应。

同时检查您是否使用'use strict';在这种情况下,this将引用您传递给subscribe方法而不是周围组件类的可调用对象。