Решение для дефекта связано с наблюдаемой. При отладке «this.apiMarketServices.get (MARKETS_PROFILES + marketId)» вызывался несколько раз, я представлял эти службы как причину неисправности:
.switchMap(({ marketId }) =>
this.apiMarketServices.get(MARKETS_PROFILES + marketId)
)
Но настоящей причиной была stateSevice, эта тема поведения была обновлена следующей, в других частях приложения.
.switchMap(_ => this.stateService.getMarketId())
Чтобы избежать этих вызовов, я создал функцию для извлечения текущего значения из BehaviorSubject.
getCurrentMarketId(): ClientData {
return this.currentMarket.value; // BehaviorSubject
}
Я добавил эту функцию, чтобы вызывать один раз за отправленный эффект.
...
.switchMap(([action, store]) => {
const id = store.product.id;
return this.savedProducts.getProduct(id, 'store');
})
.map(_ => this.stateService.getCurrentMarketId())
.switchMap(({ marketId }) =>
this.apiMarketServices.get(MARKETS_PROFILES + marketId)
)