Angular 6-直到事件结束,可观察的订阅仍未解决

时间:2018-06-22 18:39:14

标签: angular observable resolve

我有HTML文件,该文件是我从表单标签调用提交功能的地方

<form [formGroup]="loginform" (ngSubmit)="loginUser(loginform)">

是的,我有一个完整的表格,其中包含所有必填字段和提交按钮。

接下来,在我的角度文件中,我的功能是

loginUser(form: FormGroup){
    let pass: DbModel = {
      reg_username: '',
      reg_email: '',
      reg_fullname: '',
      reg_dob: '',
      reg_gender: '',
      reg_password: ''
    };
    this.storageService.login(form).subscribe(data => pass = data);
    if(form.value.reg_password === pass.reg_password)
      console.log("Logged In...");
    else
      console.log("Wrong Credentials...");   }

然后,我的服务文件是

login(form: FormGroup): Observable<DbModel>{
return this.http.get<DbModel>('http://localhost:53685/api/users/'+form.value.reg_username);

}

现在,此API调用返回正确的值,但不是在正确的时间。 调试后,我得到的期望返回值pass.reg_password保持未定义,但是一旦我在调试器中单击“继续”按钮,事件就会完成并且pass.reg_password具有正确的期望值。

如何在角度6中解析,我正在使用HttpClientModule,Net WebAPI,SQL数据库,并且还调试了Web API,它返回了正确的值。

当我在chrome开发人员工具中选中“网络”标签时,它在调试时显示为待处理状态,但在事件结束时显示为200。

1 个答案:

答案 0 :(得分:3)

您的确认已在您的订阅得到解决之前执行,您应该在subscribe回调中进行表单值检查。

this.storageService.login(form).subscribe(data => {
    if(form.value.reg_password === data.reg_password)
      console.log("Logged In...");
    else
      console.log("Wrong Credentials...");
});

要抓住的是这一行:

return this.http.get<DbModel>'http://localhost:53685/api/users/'+form.value.reg_username);

http.get(...)是异步的,因此您需要在内部 subscribe()回调中处理响应。