typescript - Angular 6 - rxjs-ominaisuutta 'map' ei ole tyypissä 'observable'
Saan tämän virheen, kun päivitin Angular 6:een. Näen dokumentaation käyttääkseni .pipe(), mutta en ymmärrä, miten käyttää pipea, kun on useita .map()-kutsuja kuten alla. Tarvitsen apuasi...
import {Injectable} from '@angular/core';
import {Http, Headers} from '@angular/http';
import 'rxjs/add/operator/map';
import {TOKEN_AUTH_PASSWORD, TOKEN_AUTH_USERNAME} from '../services/auth.constant';
@Injectable()
export class AuthenticationService {
static AUTH_TOKEN = '/oauth/token';
constructor(private http: Http) {
}
login(username: string, password: string) {
const body = `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}&grant_type=password`;
const headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Authorization', 'Basic ' + btoa(TOKEN_AUTH_USERNAME + ':' + TOKEN_AUTH_PASSWORD));
return this.http.post(AuthenticationService.AUTH_TOKEN, body, {headers})
//.map(res => res.json())
.pipe(map((res: any) => {
if (res.access_token) {
return res.access_token;
}
return null;
}));
}
}
Ymmärrän, että .pipea käytetään, kun on yksi .map käytetty kuten alla, mutta en ymmärrä, miten käyttää pipe() kun useita .mapeja käytetään.
.pipe(map(data => {})).subscribe(result => {
console.log(result);
});
Vastaus #1
Käyttääksesi putkea useiden operaattoreiden kanssa, sinun tulisi käyttää pilkkua:
return this.http.post(AuthenticationService.AUTH_TOKEN, body, {headers})
.pipe(
map(res => res.json()),
map((res: any) => {
if (res.access_token) {
return res.access_token;
}
return null;
})
);
mutta sinun tapauksessasi ei tarvitse käyttää map(res => res.json()).
ja
Aiemmissa versioissa tuonti oli import 'rxjs/add/operators/map'.
Angular 6:ssa sen pitäisi olla: import { map } from 'rxjs/operators';
Muuten, jos odotat peruutusvaikutusta, sinun pitäisi käyttää switchMap sen sijaan, että käyttäisit map. Lue lisää
