【问题标题】:TypeError: rxjs__WEBPACK_IMPORTED_MODULE_2__.Observable.throw is not a functionTypeError: rxjs__WEBPACK_IMPORTED_MODULE_2__.Observable.throw 不是函数
【发布时间】:2018-05-30 10:35:59
【问题描述】:

这是我的文件 userdata.service.ts :

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import {Observable} from 'rxjs';
import { map } from "rxjs/operators";
import { catchError } from 'rxjs/operators';
import { Data } from './userdata';

@Injectable()
export class UserDataService {

  url : "http://localhost:4200/assets/data/userdata.json";
  constructor(private http:Http) { }  

  getDataWithObservable() : Observable<any>{
      return this.http.get(this.url)
            .pipe(
              map(this.extractData),
              catchError(this.handleErrorObservable)
            );
  }

    private extractData(res: Response) 
    {
        let body = res.json();      
        return body;
    }

    private handleErrorObservable (error: Response | any) 
    {   
        return Observable.throw(error.message || error);
    }
}

我收到以下错误:

TypeError: rxjs__WEBPACK_IMPORTED_MODULE_2__.Observable.throw 不是 功能

【问题讨论】:

  • 您使用的是哪个版本的 Angular? rxjs 6?
  • 可以分享your package.json
  • "rxjs": "^6.0.0" :这是我的 package.json 中的内容,所以是的,只有 6 个
  • "依赖项": { "@angular/animations": "^6.0.0", "@angular/common": "^6.0.0", "@angular/compiler": "^ 6.0.0”、“@angular/core”:“^6.0.0”、“@angular/forms”:“^6.0.0”、“@angular/http”:“^6.0.0”、“@angular /platform-b​​rowser": "^6.0.0", "@angular/platform-b​​rowser-dynamic": "^6.0.0", "@angular/router": "^6.0.0", "body-parser" :“^1.18.3”,“core-js”:“^2.5.4”,“express”:“^4.16.3”,“mysql”:“^2.15.0”,“ngx-bootstrap”:“ ^3.0.0", "rxjs": "^6.0.0", "zone.js": "^0.8.26" }
  • 您使用的是 Angular 6 伴侣而不是 Angular 2

标签: angular rxjs angular6


【解决方案1】:

进口:

import { throwError } from 'rxjs';

用法:

return throwError(err);

【讨论】:

    【解决方案2】:

    Observable.throw() has been deleted.

    尝试使用Observable.throwError()。显然这些定义还不是最新的。

    您可以使用import { throwError } from 'rxjs'; 导入它

    【讨论】:

    • 不,它没有用!我添加了 import { throwError } from 'rxjs/observable';并将我的函数更改为 Observable.throwError() 但什么也没发生
    • @JitendraAhuja 您的导入语句不正确,那么对于 Angular 2 import {Observable} from 'rxjs'; 它应该是 import { Observable } from 'rxjs/Observable';
    • 试试import { throwError } from 'rxjs';
    • import { _throw } from 'rxjs/observable/throw'; return _throw('error');
    • 不用Observable.,只用throwError(...
    【解决方案3】:

    在 Angular 8 中使用

    throwError(new NotFoundError("Resource Not Found."))
    

    不要使用

    Observable.throw(new NotFoundError("Resource Not Found."))
    

    完整示例

    catchError((error:Response) => {
        if(error.status === 404) {
          return throwError(new NotFoundError("Resource Not Found."));
        }
        return throwError(new AppError(error));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 2018-01-09
      • 2020-06-29
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      相关资源
      最近更新 更多