代码之家  ›  专栏  ›  技术社区  ›  Abhishek Jaiswal

角度6-可观察订阅在事件结束前未解决

  •  0
  • Abhishek Jaiswal  · 技术社区  · 8 年前

    我有一个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_密码 具有正确的预期值。

    如何解决角度6,我使用 HttpClientModule ,NET WEBAPI,SQL数据库,还有我的WEBAPI调试,它返回了正确的值。

    当我检查chrome开发工具中的network选项卡时,它在调试时显示Pending,但在事件结束时显示OK 200。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Vikas RyanSand20    8 年前

    在解决订阅之前执行验证。您应该在 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()回调。