我正在尝试使用以下getFoo函数访问foo.json文件中的数据。
getFoo(): Observable<IFoo[]> {
return this.http.get<IFoo[]>(this.fooUrl).pipe(
tap(data => console.log('All: ' + JSON.stringify(data))),
catchError(this.handleError)
);
}我返回一个错误:
Argument of type 'UnaryFunction<Observable<IFoo[]>, Observable<IFoo[]>>' is
not assignable to parameter of type 'OperatorFunction<IFoo[], IFoo[]>'.
Types of parameters 'source' and 'source' are incompatible.
Type 'Observable<IFoo[]>' is missing the following properties from type
'Observable<IFoo[]>': buffer, bufferCount, bufferTime, bufferToggle, and 104 more.不太确定该怎么解决这个问题。
运行angular 9.0.3,typescript 3.7.5。
更新:
这是我的handleError:
private handleError(err: HttpErrorResponse) {
let errorMessage = '';
if (err.error instanceof ErrorEvent) {
errorMessage = `An error occurred: ${err.error.message}`;
} else {
errorMessage = `Server returned code: ${err.status}, error message is: ${err.message}`;
}
console.error(errorMessage);
return _throw (errorMessage);
}发布于 2020-05-05 19:09:41
这应该是正确的版本(没有get上的泛型,有map函数):
import { map } from 'rxjs/operators';
...
getFoo(): Observable<IFoo[]> {
return this.http.get(this.fooUrl).pipe(
// tap(data => console.log('All: ' + JSON.stringify(data))),
map<any, IFoo[]>(data => {
console.log('All: ' + JSON.stringify(data));
return data;
}),
catchError(this.handleError)
);发布于 2020-05-05 19:53:42
由于您使用的是Angular的最新版本之一,因此它应该使用RxJS 6+。throwError已经取代了_throw
private handleError(err: HttpErrorResponse) {
let errorMessage = '';
if (err.error instanceof ErrorEvent) {
errorMessage = `An error occurred: ${err.error.message}`;
} else {
errorMessage = `Server returned code: ${err.status}, error message is:
${err.message}`;
}
return throwError(errorMessage);
}如果上面的方法仍然不能解决这个问题,您将需要修复getFoo,以便所有路径实际上都返回类型为IFoo[]的observable,因为该类型被声明为getFoo的返回类型
getFoo(): Observable<IFoo[] | HttpErrorResponse> {
return this.http.get<IFoo[]>(this.fooUrl).pipe(
map(data => {
console.log('All: ' + JSON.stringify(data));
return data;
}),
catchError(this.handleError)
);
}https://stackoverflow.com/questions/61611078
复制相似问题