我正在使用Angular 5
和RXJS 5.5
在我做这样的事之前
getProjectInfo(id): Observable<any> {
const URL = `${this.API}/${id}`;
return this.http.get(URL)
.pipe(map(res => res)),
catchError(this.handleServerError);
}
handleServerError(error: any) {
console.log(error.error || error.json() || error);
return Observable.throw(error.error || error.json() || error || 'Server error');
}
但是现在我收到了这个错误
Error:(21, 5) TS2322:Type 'UnaryFunction<Observable<{}>, Observable<any>>' is not assignable to type 'Observable<any>'.
Property '_isScalar' is missing in type 'UnaryFunction<Observable<{}>, Observable<any>>'.
我也试过这个
getProjectInfo(id): Observable<any> {
const URL = `${this.API}/${id}`;
return this.http.get(URL)
.pipe(map(res => res)),
catchError(err => this.handleError('getProjInfo', URL));
}
private handleError(method: String, URL: string): any {
return (err: any) => {
const errMsg = `error in ${method}() retrieving ${URL}`;
console.log(`${errMsg}:`, err);
if (err instanceof HttpErrorResponse) {
console.log(`status: ${err.status}, ${err.statusText}`);
}
return Observable.throw(errMsg);
};
}
我做错了什么?
答案 0 :(得分:11)
请记住括号。您返回pipe
结果,catchEror
结果除以,
:
return this.http.get(URL)
.pipe(map(res => res)),
catchError(this.handleServerError);
将一个支架放在自己的位置:
return this.http.get(URL)
.pipe(
map(res => res),
catchError(this.handleServerError)
);
答案 1 :(得分:3)
我认为您接受的答案是正确的。
使用管道语法,我相信它应该是这样的:
return this.http.get(URL)
.pipe(
map(res => doStuff(res)),
catchError(err => {
this.handleServerError(err);
return this.resDummyData;
})
);
使用catchError运算符时,您需要使用订阅所需格式的数据再次返回observable。否则,如果下游订阅中的逻辑因为缺少实际的http响应数据而失败,捕获错误将无济于事......
或者,您可能希望使用其他rxjs运算符(例如重试或重试),而不是catchError,具体取决于您的用例。
答案 2 :(得分:-2)
您的管道不正确。请改为:
std::list
正如马丁所说,它应该在管道内。