OperatorFunction отсутствуют следующие свойства из типа 'Observable': _isScalar, source, operator, - PullRequest
0 голосов
/ 23 марта 2020

У меня проблема с настройкой метода getProducts () для http-запроса в Angular. Я установил наблюдаемое так, чтобы оно соответствовало моему интерфейсу "Наблюдаемый", чтобы получать и возвращать продукты в файле JSON из productUrl. Но я получаю сообщение об ошибке: «Типу« OperatorFunction »не хватает следующих свойств из типа« Наблюдаемый »: _isScalar, source, operator, lift и еще 6».

Это мой product.service.ts

export class ProductService {
  public productUrl = "/api/products/roducts.json"

  constructor(private http: HttpClient) { }

  getProducts(): Observable<IProduct[]> {
    return this.http.get<IProduct[]>(this.productUrl)
    .pipe(
      tap(data => console.log("All: " + JSON.stringify(data)))),
      catchError(this.handleError)

  }

  private handleError(err: HttpErrorResponse){
    let errorMessage = "";
    if(err.error instanceof ErrorEvent){
      errorMessage = "An error occured " +err.error.message; 
    }
    else{
      errorMessage = "Server returned core " + err.status +" error message is " + err.message 
    }
    console.error(errorMessage)
    return throwError(errorMessage)
  }
}

и это produst-list.component, который вызывает метод onInit

 errorMessage: string;
 products: IProduct[] = [];

  ngOnInit() {
    this.productService.getProducts().subscribe({
      next: products => this.products = products,
      error: err => this.errorMessage = err
    });

Ответы [ 2 ]

0 голосов
/ 23 марта 2020
.pipe(
  tap(data => console.log("All: " + JSON.stringify(data))),
  catchError(this.handleError)
)

попробуйте это, на первый взгляд, похоже, что catchError должен быть внутри pipe.

0 голосов
/ 23 марта 2020

Ошибка, которую вы получаете, вероятно, из-за этой строки:

tap(data => console.log("All: " + JSON.stringify(data))))

Вы можете использовать функции стрелок (или анонимные), но вы должны помнить, что если вы не помещаете код в скобки {} это означает, что вы возвращаете результат этого кода. Это означает, что ваш код такой же, как:

tap(data => {
return console.log("All: " + JSON.stringify(data)))
   }
);

Я также говорю об этом:

  next: products => this.products = products,
  error: err => this.errorMessage = err
...