Наблюдаемая функция Angular / rxjs, возвращаемая без данных HTTP - PullRequest
0 голосов
/ 15 мая 2018

У меня есть функция для возврата свежего токена доступа с удаленного сервера с использованием токена обновления (для использования с HttpInterceptor в Angular 4.3+) на основе этого Angular 4 Tutorial - Обработка обновления токена с помощью нового HttpInterceptor :

doRefreshToken(): Observable<string> {
   http.post('/my/api', refreshToken)
        .subscribe(
          (data) => {
            this.newAccessToken = (<any>data).accessToken;
            console.log("RECEIVED NEW TOKEN: " + this.newAccessToken);
          }, 
          (error) => { },
          () => { }
         );
    console.log("RETURNING NEW TOKEN: " + this.newAccessToken); 
    return Observable.of(this.newAccessToken);
}

Но вызов doRefreshToken() возвращает undefined до получения токена с сервера.Почему функция отвечает до поступления данных?

Выход консоли:

RETURNING NEW TOKEN: undefined blah blah blah RECEIVED NEW TOKEN: abc123imanewtoken

1 Ответ

0 голосов
/ 15 мая 2018

http.post не является синхронным. Вместо этого вы должны использовать что-то вроде этого:

doRefreshToken(): Observable<string> {
   return new Observable<string>((observer) => {
      http.post('/my/api', refreshToken)
        .subscribe(
          (data) => {
            if (data && data.accessToken) {
              observer.next((<any>data).accessToken);
            } else {
              observer.error();
            }
          }, 
          (error) => { observer.error(); },
          () => { }
         );
   });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...