Ангулярное приложение останавливается при подписке на api response - PullRequest
0 голосов
/ 30 июня 2018

Я в своем уме пытаюсь понять, что я сделал неправильно в своем приложении 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 голосов
/ 30 июня 2018

Я думаю, у вас неправильная subscribe(...) реализация. Его параметры - это функции (next, error, complete), которые немедленно вызываются при возникновении связанных событий, но вы передаете функцию, которая возвращает объект с внутренними функциями data и error, которые никогда не будут вызваны.

Попробуйте изменить раздел следующим образом:

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')
            }
          );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...