当前位置: 首页 > 知识库问答 >
问题:

Angular2 Http与RXJS Observable TypeError:this。http。得到(…)。映射(…)。catch不是一个函数

万嘉石
2023-03-14

我有以下服务,这是工作良好,直到今天我得到了这个错误

TypeError: this.http.get(...).map(...).catch is not a function. 

当我调试这段代码时,它会在捕获方法时崩溃。

import { Test } from "./home.component";
import { Injectable }     from "@angular/core";
import { Inject } from "@angular/core";
import { Http , Response  } from "@angular/http";
import { Observable }     from "rxjs/Observable";

@Injectable()
export class HomeService {
   public constructor(@Inject(Http)  private http: Http) {}

   public getData (): Observable<Test []> {
        return this.http.get("./src/app/home/home-data.json")
            .map(this.extractData).catch(this.handleError);
    }

    public extractData(res: Response) {
        let body = res.json();
        return body.data || { };
    }

    public handleError (error: any) {
        // In a real world app, we might use a remote logging infrastructure
        // We"d also dig deeper into the error to get a better message
        let errMsg = (error.message) ? error.message :
            error.status ? `${error.status} - ${error.statusText}` : "Server error";
        console.error(errMsg); // log to console instead
        return Observable.throw(errMsg);
    }
  }

共有3个答案

郝峰
2023-03-14

“rxjs/Observable”中的“O”字符必须是大写。

将其指定为小写字母o,会导致此错误和其他怪异的错误。这必须这样导入:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

我花了一个小时才找到它。使用导入时,名称通常使用小写。这是我第一次看到这个。我希望它能帮助其他人:)

白子默
2023-03-14

我有同样的问题,但在我的例子中,问题是,我在模块中多次导入所需的模块。ts

孙经艺
2023-03-14

看来catch操作符没有导入。

您可以尝试像这样导入它:

import 'rxjs/add/operator/catch'

或者更一般地说,如果你想有更多的方法来观察:

import 'rxjs/Rx';

看到这个问题:

  • Angular 2 HTTP GET与TypeScript错误http.get(...). map不是一个函数在[null]
 类似资料:
  • 我试着按照教程angular.io(游览英雄)但不是教程,我试着在一些JSON上提出真正的GET请求。 我的代码如下所示: 为了服务,我只进口一些基本的东西: 其中是TOH中的基本副本,所以: 如何在服务中调用此特定方法:首先,我尝试多种方法,但在调试时,我只尝试控制台。将其记录为: 在控制台中加载页面时,我发现多个错误:第一个错误是: 例外:TypeError:这是一个错误。http。得到(…)

  • 我已经查找了所有github问题和StackOverflow帖子,但是我无法让它工作 ( https://github.com/angular/angular/issues/5632 ) (Angular 2 HTTP GET与TypeScript错误http.get(...). map不是一个函数在[null]) 我正在使用Angular2@2.0.0-贝塔。1 Rxjs(rxjs@5.0.0-

  • 问题内容: 我正在尝试使用jQuery和Ajax,并且使用了这种方法。但是我收到错误$ .toJSON不是firebug中的函数。问题出在哪里?我使用jquery 1.3.2。谢谢 问题答案: 没错 没有功能:http : //api.jquery.com/jQuery.toJSON。也许您想使用它。

  • 我有一个json格式的地图列表,我正试图在列表上呈现“title”。 我通过一个api(http.get)读取数据,然后解析它。 我想在列表中显示标题。 这是我的代码... 获取数据 转换为json 欢迎参加模范班 我得到一个错误说"类型'列表'不是类型'地图的子类型

  • 问题内容: 说我有以下代码 我有一些可能会返回的函数,并将其应用于流的元素。然后,我想确保将所有结果改为默认值。与使用前面的示例定义了辅助变量并在lambda表达式中使用代码块的示例相比,使用下面的示例中的两个映射有什么明显的区别? 是否存在避免在lambda函数中使用块语句的标准? 问题答案: 都可以。选择一个对您来说更易读的。如果计算能够自然分解,就像这样,那么多个映射可能更易读。某些计算不会

  • 我试图将我的Springmvc项目转换为Spring启动。我根据Spring启动转换了所有必要的文件。控制台上没有错误。但是当我在浏览器中运行我的网络应用程序时,我得到了这个错误。 在名为“DispatcherServlet”的DispatcherServlet中找不到URI为[/onlineshopping/WEB-INF/views/page.jsp]的HTTP请求的映射 我尝试运行的任何ur