Как импортировать свойство карты из rxjs в угловой проект, Ошибка: Свойство 'map' не существует для типа 'Observable <Object>'? - PullRequest
2 голосов
/ 24 марта 2019

Я представляю данные на сервере в угловом формате по запросу HTTP post и по rxjs, но даже после импорта свойства map из rxjs это выдает ошибку.

import { Injectable } from '@angular/core';
import {HttpClient,HttpHeaders,HttpErrorResponse} from '@angular/common/http';
import {throwError } from 'rxjs';

import 'rxjs/add/operator/map';

@Injectable({
   providedIn: 'root'
})
export class AuthService {


  constructor(private http:HttpClient) { }

  registerUser(user){
    let headers = new HttpHeaders();
    headers.append('content-type','application/json');

    return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
          .map(response =>response.json())
          .catch(this.errorHandler)

  }


  errorHandler(error:HttpErrorResponse){
     return throwError(error.message||"Server not responding");
  }

}

я даже импортирую свойство карты следующим образом:

import {map} from 'rxjs/add/operator';

Ошибка:

Property 'map' does not exist on type 'Observable<Object>'

Пользователь - объект

Ответы [ 3 ]

0 голосов
/ 24 марта 2019

Если вы используете RXJS 6 или выше, вы должны передать операцию

 this.http.post('http://localhost:8080/users/register',user,{headers:headers})
 .pipe(map(response => {
   // do something with response and return it
 })
 catchError(this.errorHandler)
  );

также, если вы используете HttpClient вместо Http, тогда response.json() не требуется, поскольку ответ будет десериализован json.

0 голосов
/ 24 марта 2019

Если вы используете RXJS 6 или выше, использование операторов немного изменилось.

Вы импортируете:

import { map, catchError } from 'rxjs/operators';

Вы используете карту внутри оператора канала,как:

return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
      .pipe(
          map(response => {
              // doSomething 
          }),
          catchError(error => {
              this.errorHandler(error);
              return of(`Caught an error: ${error}`);
          })
      );
0 голосов
/ 24 марта 2019
  • Начиная с RxJS v6 и выше, поддержка вызовов операторов непосредственно на Observable s устарела.Вместо этого используйте Observable.pipe.
  • Начиная с RxJS v6 и выше, поддержка операторов прямого импорта устарела.Вместо этого, импорт из rxjs/operators.
  • HttpClient (из @angular/common/http) по умолчанию отображает ответы как JSON.Нет необходимости в операторе map (это прежнее поведение для Http (из @angular/http)).

Ниже приведен исправленный пример:

import { /* imports go here */ } from '@angular/common/http';
// ...

// ...
export class AuthService {
  // ...

  registerUser(user){
    let headers = new HttpHeaders();
    headers.append('content-type','application/json');

    return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
          .catch(this.errorHandler);

  }
}
...