angular - Ionic : this.http.get(...).map är inte en funktion
I mitt följande kodavsnitt för Ionic 3, även efter att ha lagt till alla importer för rxjs-operatorn map, kvarstår fortfarande problemet.
TypeError: this.http.get(...).map är inte en funktion
mina importer redan tillagda och koden är som följer:
import { map } from 'rxjs/operators';
import "rxjs/add/operator/map";
import "rxjs/Rx";
import { Injectable } from "@angular/core";
import { HTTP } from "@ionic-native/http";
import { BehaviorSubject } from "rxjs/BehaviorSubject";
import { Observable } from "rxjs/Observable";
public method(): Observable<any> {
return this.http
.get(this.getMethodUrl)
.map(this.extractResponse)
.catch(this.handleError);
}
RxJs version : 5.2.11
Jonisk :
ionic (Ionic CLI) : 4.0.0
(C:\Users\Genesis-PC\AppData\Roaming\npm\node_modules\ionic)
IonicFramework : ionic-angular 3.9.2 @ionic/app-scripts : 3.1.11
Cordova :
cordova (Cordova CLI) : 8.0.0
Cordova-plattformar : android 7.1.1
System :
NodeJS : v8.11.4 (C:\Program Files\nodejs\node.exe)
npm :6.4.0 OS : Windows 10
Även om den här frågan har diskuterats och lösts på StackOverflow tidigare, fungerar ingen av dem för mig.
All hjälp kommer att uppskattas djupt!
Svar #1
Enligt den officiella Ionic-dokumentationen (https://ionicframework.com/docs/native/http/) är returtypen för HTTP.get Promise<HTTPResponse>, inte Observable. Därför kan du inte använda Observable-operatörer på den typen.
För att skapa en Observable från ett Promise (RxJS 5), använd helt enkelt:
import { Observable } from 'rxjs/Observable';
let httpResult$ = Observable.fromPromise(this.http.get(this.getMethodUrl));
Här är din kod med användning av Observable:
import { map } from 'rxjs/operators';
import "rxjs/add/operator/map";
import "rxjs/Rx";
import { Injectable } from "@angular/core";
import { HTTP } from "@ionic-native/http";
import { BehaviorSubject } from "rxjs/BehaviorSubject";
import { Observable } from "rxjs/Observable";
public method(): Observable<any> {
return Observable.fromPromise(this.http
.get(this.getMethodUrl))
.map(this.extractResponse)
.catch(this.handleError);
}
För RxJS 6+, använd den nya from-operatorn:
import { from } from 'rxjs';
let httpResult$ = from(this.http.get(this.getMethodUrl));
Obs: Ditt IDE kanske inte är korrekt konfigurerat, detta typfel bör visas omedelbart (markerat i rött).
Svar #2
om du använder RXJS 6, använd pipe
import { Observable } from "rxjs";
import { map,catchError } from "rxjs/operators";
public method(): Observable<any> {
return this.http
.get(this.getMethodUrl)
.pipe(
map(this.extractResponse),
catchError(this.handleError)
)
}
