angular - RxJS 6 - 取消/结束管道
问题描述
尤其是使用新版本的 RxJS 6 和管道运算符。当前使用管道获取 API 调用的结果并将它们传递给一系列附加任务。
一切都很好,但如果我遇到问题,似乎无法找到取消或结束管道的方法。例如,我正在使用点击运算符来检查值是否为空。然后我抛出一个错误,但管道似乎仍然移动到下一个任务,在这种情况下是 concatmap。
因此,如何提前结束或取消管道?提前致谢。
getData(id: String): Observable<any[]> {
return this.http.get<any>(`${this.baseUrl}/path/${id}`).pipe(
tap(evt => {
if (evt == null) {
return throwError(new Error("No data found..."));
}
}),
concatMap(
evt =>
<Observable<any[]>>(
this.http.get<any[]>(
`${this.baseUrl}/path/relatedby/${evt.child_id}`
).map(res =>( {"response1":evt, "response2":res}) )
)
),
retry(3),
catchError(this.handleError("getData", []))
);}
解决方案
您还可以使用信号Subject
和 rxjs 运算符取消/结束管道:takeUntil
例子
httpGetSafe(path: string): Observable<Data> {
const stopSignal$ = new Subject();
return this.http.get<Data>(path).pipe(
map(data => {
const isBad = data === null;
if (isBad) {
stopSignal$.next();
}
return data;
}),
takeUntil(stopSignal$)
);
}
有时它比抛出错误更简单,更灵活......
推荐阅读
- java - 实现可比较接口的类型的 LinkedList
- python - 如何获取不和谐服务器中所有成员的列表?
- javascript - Calculating Time Difference with Current time
- javascript - 光滑的 JS 自定义导航不起作用
- python - 如何将数值与熊猫列标题中的分类范围进行比较?
- python - 具有固定数量元素的 Python 背包问题
- android - Android房间继承策略单表
- react-native - URL 不适合 React Native 中的移动屏幕
- javascript - 是否可以使用 XMLHttpRequest/FormData 对标准 ASP.Net Web 表单进行 HTTP POST?
- django - django运行错误可能是什么问题