打字稿(角度)订阅

时间:2020-02-27 18:11:08

标签: angular typescript

嗨,我在本地变量中存储值有问题。可能是同步/异步功能订阅出现问题。

POST请求:

existUser(username) {
return this.http.post(`${API_URL}/existuser`, username);
}

功能:

 onSubmit() {

    this.basicAuthenticationService.existUser(this.registerForm.value.username).subscribe(
      (data: boolean) => this.existuser = data;

    );
    //this console log is undefined(empty)
    console.log(this.existuser);

控制台日志未定义(空),如何将数据保存到本地变量。谢谢

2 个答案:

答案 0 :(得分:0)

您可能想尝试将async / await添加到onSubmit函数中,以获得所需的行为。例如:

async onSubmit() {
  this.existUser = await this.basicAuthenticationService.existUser(this.registerForm.value.username).toPromise();

  console.log(this.existuser);
}

这可以通过将您的可观察对象转换为一个承诺,并在继续之前等待该承诺的响应。

我还要补充说,可观察性非常强大,如果您打算将Angular用于大型应用程序,我强烈建议您完全理解它们。

答案 1 :(得分:0)

是的,是的,它与异步调用有关。

解决这种情况的方法很少。

最简单的方法是在内部使用变量进行订阅。您可以在此处清除存储空间或在另一个链接上导航用户。喜欢:

onSubmit() {

    this.basicAuthenticationService.existUser(this.registerForm.value.username).subscribe(
      (data: boolean) => {
         this.existuser = data;
         // WORK HERE WITH DATA
         // local Storage cleaning
         // navigation to login page
       });

第二个变体,如果您需要启动另一个http调用,则只需使用pipe和switchMap / mergeMap / concatMap运算符就可以完成流中的所有操作。

this.basicAuthenticationService.existUser(this.registerForm.value.username)
  .pipe(switchMap(data) => {
    return nextHttp.call()
})
  .subscribe(....)