订阅api响应时,Angular应用程序停止

时间:2018-06-30 12:16:04

标签: angular rxjs

我想尽办法找出Angular 6应用程序中做错了什么。下面的代码的问题是它“应该”工作,但是我的角度应用程序只是停止并且不会继续。

请注意,我所有其他API调用和类似代码都可以正常工作。

我已在控制台日志中添加了一些信息,以试图找出正在发生的事情:

我有一个正在提交的表格:

submit(f) {
  console.log('2')
  // Now I'm saving the data, this works
  this.userService.completeProfile(this.model)
    .pipe(first())
    .subscribe(
      data => {
        console.log('3')
        // this is to get a new token
        this.authService.getNewToken(this.model.id)
          .pipe(first())
          .subscribe(() =>
            data => {
              // I never get to 8
              console.log('8')
              this.router.navigateByUrl('/register/profile/complete');
            },
            error => {
              console.log('9')
            }
          );

      },
      error => {
          console.log('10')
      });

}

这是我的身份验证服务:

private currentUserSubject = new BehaviorSubject<LoggedInUser>({} as LoggedInUser);
currentUser = this.currentUserSubject.asObservable();

setCurrentUser(): void {
    if (localStorage.getItem("auth_token")) {
        let jwtData = localStorage.getItem("auth_token").split('.')[1]
        let decodedJwtJsonData = window.atob(jwtData)
        let decodedJwtData = JSON.parse(decodedJwtJsonData)

        this.currentUserSubject.next(
            {
                name: decodedJwtData.name,
                id: decodedJwtData.id,
            }
        );
    }
}

getNewToken(id: String) {
    return this.http.post<any>(this.baseUrl + '/GetNewToken', { id: id })
    .pipe(map(user => {
        console.log(user)
        if (user && user.auth_token) {
            console.log("4")
            //localStorage.setItem('auth_token', user.auth_token);
            console.log("5")
            //this.setCurrentUser();
            console.log("6")
        }
        console.log("7")
        return user;
    }));
}

控制台输出在7点停止

1 个答案:

答案 0 :(得分:2)

我认为您的subscribe(...)实现错误。它的参数是发生相关事件时立即被调用的函数(下一个,错误,完成),但是您传递的函数返回的对象带有dataerror内部函数,这些对象将永远不会被调用

尝试像这样更改部分:

this.authService.getNewToken(this.model.id)
          .pipe(first())
          .subscribe(data =>
            {
              // I never get to 8
              console.log('8')
              this.router.navigateByUrl('/register/profile/complete');
            },
            error => {
              console.log('9')
            }
          );