从MongoDB取数据时遇报错:Property 'subscribe'不存在于OperatorFunction类型
解决Angular中
Property 'subscribe' does not exist on type 'OperatorFunction'报错 嘿,这个问题我太熟啦!咱们直接揪出核心问题:你在CommonService的GetProcesses()方法里,括号位置写错了,导致返回的不是可订阅的Observable,而是一个操作符函数,自然就没法调用subscribe()啦。
问题根源
看你原代码里的这段逻辑:
GetProcesses(){ return this.http.get('http://localhost:4000/getProcesses/') .pipe(map((response: Response) => response.json())), catchError(error => Observable.of(null)) }
这里的catchError没有被包含在pipe()的括号内部,而是和pipe()的结果用逗号分隔了。这就导致函数实际返回的是catchError这个OperatorFunction,而不是经过pipe处理后的Observable——只有Observable才具备subscribe方法呀!
修复方法
把catchError移到pipe()的括号里,作为第二个参数传递进去,让所有操作符都在pipe内链式执行:
// common.service.ts 修正后的完整代码 import { Injectable } from '@angular/core'; import {Http, Response, Headers, RequestOptions } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import { map, catchError } from 'rxjs/operators'; import 'rxjs/add/operator/do'; import 'rxjs/Rx'; @Injectable() export class CommonService { constructor(private http: Http) { } // 建议显式声明返回类型,让TypeScript帮你做类型检查 GetProcesses(): Observable<any> { return this.http.get('http://localhost:4000/getProcesses/') .pipe( map((response: Response) => response.json()), catchError(error => Observable.of(null)) ); } }
这样修改后,GetProcesses()就会返回一个标准的Observable对象,你在组件里调用.subscribe()就不会再报错啦!
内容的提问来源于stack exchange,提问作者Christiaan
相关产品推荐
相关产品推荐

