【发布时间】:2017-03-21 09:27:51
【问题描述】:
我正在尝试将工作代码从 Plnkr 复制到我的机器上,但它在 VisualStudio 中显示错误。
目前我正在使用@angular "^2.4.5" 和rxjs "^5.2.0"
错误是说
'(error: any) => void' 类型的参数不能分配给'(err: any, catched: Observable) => ObservableInput' 类型的参数。
您可以在我的以下脚本中看到,我复制了与 Plnkr 代码完全相似的代码并导入了“catch”运算符。但是,它不起作用并在getStudentCourse2() 方法中显示上述错误。
如果我删除了 catch 运算符并像 getStudentCourse() 方法中的那样更改了代码,它可以工作并且我可以看到结果。
student.service.ts
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/of';
@Injectable()
export class StudentService {
private http: Http;
constructor(http: Http) {
this.http = http;
}
getStudentCourse(): Observable<IStudentCourse> {
return this.http.get('/api/student/getstudentcourse').map(result => {
return result.json() as IStudentCourse;
}, error => console.log('Could not load data in service.'));
}
getStudentCourse2(): Observable<IStudentCourse> {
return this.http.get('https://58cff77fe1a0d412002e446d.mockapi.io/api/student/getstudentcourse/2').map(result => {
return result.json() as IStudentCourse;
}).catch(error => console.log('Could not load data in service.'));
}
}
export interface IStudentCourse {
refNo: string;
student: string;
offeringName: string;
offeringID: number;
}
我不知道为什么“Catch”运算符在我的代码中不能像“Plnkr”一样工作。你们能帮我解决这个问题吗?谢谢。
【问题讨论】:
-
你可以在 catch 操作符中创建一个 Observable 对象。例如看下面的代码:return this.http.get('58cff77fe1a0d412002e446d.mockapi.io/api/student/… => { return result.json() as IStudentCourse; })。 catch(error => Observable.throw('Could not load data in service.'));
标签: angular rxjs observable