【发布时间】:2020-12-29 03:25:03
【问题描述】:
我在我的应用程序中使用 angular、ngrx 和 rxjs。 当一个效果被调用两次时,第一个效果的http请求被取消,只计算第二个。
我想在 ngrx 范围之外的函数中模拟它。
我有以下方法:
checkMissionPoint(
positions: Array<Cesium.Cartographic>
): Observable<{
valid: boolean;
response: Array<CheckWaypointResponse>;
}> {
return this.store$.pipe(
select(TransactionsStoreSelectors.selectedTransactionId),
take(1),
switchMap((tId) =>
this.httpClient
.post<Array<CheckWaypointResponse>>(
HTTPUtils.getPath(`${environment.FLIGHT_URL}/trajectories/${tId}/checkpoints`),
{positions}
)
.pipe(
switchMap((result) => {
return result;
})
)
)
);
}
我在我的应用程序中在应用程序的各个位置这样调用此方法
this.missionHelperService.checkMissionPoint(positions)
现在,我知道了一些取消它的丑陋方法,如果再次调用该方法并且引用仍然存在,则保留引用并取消订阅。但我想知道是否有一个不错的 rxjs 方法来实现这一点。
谢谢。
编辑:我做了一个小的 stackblitz,但你需要在你的 chrome 控制台中设置 SLOW 3G 连接https://angular-xm2ixt.stackblitz.io
你会注意到 obs 被调用了两次,api 会触发和应答,我想要的是第二次调用取消第一次(并向正在监听的人发送错误,sub 2 将正常运行)
【问题讨论】:
-
我对你的要求有点困惑。您是说您发布的代码有效吗?你只想要没有 rxjs 的相同功能?
-
能否提供一个 stackblitz 演示?这会很有帮助。