我们也遇到了同样的问题。最终发现是由于括号不匹配所致。我们使用了switchMap操作符和catcherror操作符。但是由于我们的括号放错了位置,catcherror操作符被识别为switchMap的第二个参数(结果选择器)。令人感到有趣的是,这仍然可以编译通过。因此,请务必仔细检查您的括号。
我遇到了同样的问题。catchError不应该被放在tap括号中。
错误:在tap中调用catchError
getHeroes() : Observable<Hero[]> {
return this.http.get<Hero[]>(this.heroesUrl)
.pipe(tap(_ => console.log('Fetching heroes'),
catchError(this.handleError('getting heroes', [])) ))
}
正确的方法是: (在tap中不要使用catchError)
getHeroes() : Observable<Hero[]> {
return this.http.get<Hero[]>(this.heroesUrl)
.pipe(tap(_ => console.log('Fetching heroes')),
catchError(this.handleError('getting heroes', []) ))
}
我在我的web应用程序中遇到了同样的错误,直到我意识到测试升级rxjs版本才解决了问题,因为我使用的是6.0.0版本,将其更改为目前最新的版本6.3.2后,问题得到了解决。 总之,这是rxjs第一个版本中的一个bug,我们应该多进行一些测试,但目前为止还不错。 希望这可以帮助你。
不正确:
obs.pipe(
map((data: Data) => {
// TODO: transform your data
}),
tap((registrationResponse) => {
// TODO: transform your data
}),
catchError((error) => {
// TODO: Throw an error
throw new Error('Throw a different error');
// OR
// TODO: Catch error and return a different observable value
return of(false)
})
);
正确:
obs.pipe(
catchError((error) => {
// TODO: Throw an error
throw new Error('Throw a different error');
// OR
// TODO: Catch error and return a different observable value
return of(false)
}),
map((data: Data) => {
// TODO: transform your data
}),
tap((registrationResponse) => {
// TODO: transform your data
})
);
尝试检查您的WebAPI。
如果您无法访问Web服务器日志,则可以将null设置为'catchError'块,并使用调试器检查Angular应用程序。
我曾遇到同样的问题,并通过使用catch和管道一起解决,而不是将catch作为catchError的参数。
this.http.post(payload)
.pipe(map((res) => {
return res.data;
}),
)
.catch(err => {
throw of(err);
});
}
对于所有在使用 Angular 时遇到此问题的人 - 我不小心从 rxjs 中导入了 window,这就引发了此错误。
对我来说,我在使用catchError
时没有使用tap
错误的:
import {catchError} from 'rxjs/operators';
this.http.get(url, options).pipe(
catchError(
(err: HttpErrorResponse) => {
// Do Stuff
}
)
);
正确:
import {catchError, tap} from 'rxjs/operators';
this.http.get(url, options).pipe(
tap(
() => {},
catchError(
(err: HttpErrorResponse) => {
// Do Stuff
}
)
)
);
.map(map(mappingFunction))
而不是.map(mappingFunction)
,这导致了这个错误。 - Cyril Duchon-Dorissubscribe(tap((): void => { ... }))
而不是(正确的版本):subscribe((): void => { ... })
即在subscribe
部分内有一个tap
:- $ - Fred Danna