Метод http.get () не работает в Angular - PullRequest
0 голосов
/ 06 сентября 2018

Моя цель - использовать веб-сервис REST в Angular, и сейчас я провожу несколько испытаний. Ниже код не работает и собирается в блоке ошибок. Можете ли вы помочь мне определить проблему? Заранее спасибо.

 interface UserResponse {
     login: string;
     bio: string;
     company: string;
   }

    constructor(public http: HttpClient) {
        this.http.get<UserResponse>('https://api.github.com/users/seeschweiler')
        .pipe( tap(heroes =>{
             alert()
             }),
          catchError(this.handleError('getHeroes', []))
        );
      }

      private handleError<T> (operation = 'operation', result?: T) {
           alert()
      return (error: any): Observable<T> => {
        // TODO: send the error to remote logging infrastructure
        console.error(error); // log to console instead

        // TODO: better job of transforming error for user consumption
        console.log(`${operation} failed: ${error.message}`);

        // Let the app keep running by returning an empty result.
        return of(result as T);
      };
    }

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

HttpClient#get() обеспечивает так называемую "наблюдаемую холодность". Это означает, что он не выполнит ничего, что находится под капотом, пока не будет подписчик на это наблюдаемое. Более того, несколько подписок (по умолчанию) приведут к выполнению нескольких запросов (если только вы не передадите их определенным «общим» способом)

Итак:

    this.http.get<UserResponse>('https://api.github.com/users/seeschweiler')
    .pipe( tap(heroes =>{
         alert()
         }),
      catchError(this.handleError('getHeroes', []))
    ).subscribe(result=>console.log(result));

сделает ваш запрос.

Пожалуйста, внимательно прочитайте с пониманием учебник, который вы пройдете («Тур героев»), поскольку такие аспекты объяснены там в достаточных деталях.

0 голосов
/ 06 сентября 2018

Поскольку он возвращает наблюдаемое, вам нужно подписать это значение. Вот решение и результаты.

this.http.get<any>('https://api.github.com/users/seeschweiler').subscribe( x => console.log(x));

Результат в консоли Результат :

0 голосов
/ 06 сентября 2018

Вы должны подписаться на обозримое, чтобы запустить его:

....
constructor(public http: HttpClient) {
    this.http.get<UserResponse>('https://api.github.com/users/seeschweiler')
    .catch(this.handleError('getHeroes', [])))
    .subscribe(response => console.log(response));
  }
  ....

Или вы можете использовать pipe, если хотите, но вам все равно нужно подписаться

    constructor(public http: HttpClient) {
    this.http.get<UserResponse>('https://api.github.com/users/seeschweiler')
    .pipe(
        tap(response => { 
            console.log(response); 
            /* process your data */ 
            return response;}),
        catchError(this.handleError('getHeroes', [])),
        )
    .subscribe(processingResult => /* handle processed response */);
  }
...