Angular Ionic:this.http.get(…).map不是函数

Angular Ionic:this.http.get(…).map不是函数,angular,typescript,ionic-framework,rxjs,ionic3,Angular,Typescript,Ionic Framework,Rxjs,Ionic3,在我下面的爱奥尼亚3号代码摘录中, 即使在为map的rxjs操作符添加了所有导入之后,问题仍然存在 TypeError:this.http.get(…).map不是函数 我的导入已添加,代码如下: import { map } from 'rxjs/operators'; import "rxjs/add/operator/map"; import "rxjs/Rx"; import { Injectable } from "@angular/core"; import { HTTP } fro

在我下面的爱奥尼亚3号代码摘录中, 即使在为map的rxjs操作符添加了所有导入之后,问题仍然存在

TypeError:this.http.get(…).map不是函数

我的导入已添加,代码如下:

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/operators'导入{map};
导入“rxjs/add/operator/map”;
导入“rxjs/Rx”;
从“@angular/core”导入{Injectable}”;
从“@ionic native/HTTP”导入{HTTP};
从“rxjs/BehaviorSubject”导入{BehaviorSubject};
从“rxjs/Observable”导入{Observable};
public方法():可观察{
返回此文件。http
.get(this.getMethodUrl)
.map(此.extractResponse)
.接住(这个.把手错误);
}
RxJs版本:5.2.11

离子型:

爱奥尼亚(爱奥尼亚CLI):4.0.0

(C:\Users\Genesis PC\AppData\Roaming\npm\node\U modules\ionic)

IonicFramework:ionic angular 3.9.2@ionic/app脚本:3.1.11

科尔多瓦:

cordova(cordova CLI):8.0.0

Cordova平台:安卓7.1.1

系统:

NodeJS:v8.11.4(C:\Program Files\NodeJS\node.exe)
净现值:6.4.0 操作系统:Windows 10

即使这个问题以前已经在StackOverflow上讨论过并解决过,也没有一个是适合我的


我们将非常感谢您的帮助

如果您使用的是RXJS 6,请使用
管道

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)
  )
}
从“rxjs”导入{Observable};
从“rxjs/operators”导入{map,catchError};
public方法():可观察{
返回此文件。http
.get(this.getMethodUrl)
.烟斗(
map(此.extractResponse),
catchError(this.handleError)
)
}

根据官方爱奥尼亚文档(),
HTTP.get
的返回类型是
Promise
,不可见。因此,不能在该类型上使用可观察运算符

为了从承诺(RxJS 5)中创建可观察的,只需使用:

import { Observable } from 'rxjs/Observable';
let httpResult$ =  Observable.fromPromise(this.http.get(this.getMethodUrl));
以下是使用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);
}

注意:您的IDE可能未正确配置,此类型错误应立即出现(标记为红色)。

Ionic
http。get
正在返回承诺。与角度
httpClient.get
(可观察返回)不同,您有3个选项来解决此问题

  • 更改代码以使用promise

    this.http
    .get(this.getMethodUrl)
    .then(this.extractResponse)//更改为.then
    …

  • 将您的ionic http服务替换为angular
    httpClient.get
    。不确定为什么不使用
    httpClient。首先获取

  • 使用
    fromPromise
    将承诺转换为可观察的,如@ggradnig所述。但是,建议您选择选项2


  • 如果您正在使用rxjs6,则
    map
    不再作为
    Observable
    上的函数存在,您现在必须将可出租运算符与
    管道一起使用
    Rxjs的当前版本为5.2.11。我也尝试过使用.pipe(),但收到的错误是TypeError:this.http.get(…).pipe不是functionIDE错误:../node_modules/rxjs/Rx没有导出成员,来自“抱歉,我刚刚看到您在操作rxjs 5.2”。尝试使用Rx.Observable.fromPromise()我将编辑运行后错误:TypeError:无法读取未定义的属性“get”代码段不是代码的完整版本,我将在编辑中添加完整版本;-)嗯,对不起,我需要完整的代码来解决这个问题。无论如何,我认为你的问题得到的回答只是暗示你得到了一个承诺,而不是一个可观察的承诺。剩下的你需要自己解决;-)我也尝试过使用.pipe(),但收到的错误是TypeError:this.http.get(…).pipe不是一个函数升级Rxjs版本npm安装Rxjs compatI我尝试了选项2,但后来在Ionic:
    错误:Uncaught(承诺中):错误:StaticInjectorError(AppModule)[http->ConnectionBackend]:StaticInjectorError(平台:core)[Http->ConnectionBackend]:NullInjectorError:ConnectionBackend没有提供程序!错误:StaticInjectorError(AppModule)[Http->ConnectionBackend]:StaticInjectorError(平台:核心)[Http->ConnectionBackend]:
    因为你需要将httpClientModule导入你的ngmodule
    app.module.ts
    。你需要了解角度如何工作的基本原理。不可能写下你要遵循的每个步骤。
    import { from } from 'rxjs';
    let httpResult$ =  from(this.http.get(this.getMethodUrl));