【发布时间】:2018-08-30 23:16:20
【问题描述】:
我有这样的效果,即请求多个值以从服务中检索产品。在调度 REQUEST_PRODUCTS 按预期调用一次之后,但是当我尝试转到路由中的其他位置时, this.apiMarketServices 被调用了几次,这会触发路由器导航,这将重定向到上一页。操作 REQUEST_PRODUCTS 被调度一次。为什么这种效应被称为数次?
我是否需要在效果中添加某种停止以避免在返回 GetSuccess 和 GetFailed 之后被调用?
@Effect()
requestProductsFromMarket = this.actions$
.ofType(REQUEST_PRODUCTS)
.withLatestFrom(this.store)
.switchMap(([action, store]) => {
const id = store.product.id;
return this.savedProducts.getProduct(id, 'store');
})
.switchMap(_ => this.stateService.getMarketId())
.switchMap(({ marketId }) =>
this.apiMarketServices.get(MARKETS_PROFILES + marketId)
)
.withLatestFrom(this.store)
.map(([r, store]) => {
const ser = r.data.map(s => s.legId);
const storSer =
store.product.serIds;
if (storSer.every(s =>ser.includes(s))) {
this.router.navigate([
`/products/edit/${store.products.id}`
]);
return GetSuccess;
} else {
return GetFailed;
}
})
.catch(() => of(GetQueryFailed));
【问题讨论】:
-
我可以处理在最后一个 switchMap 之后添加的 first() 运算符,Promise 称为 servaral 时间,但只能工作一次。使用调度再次调用后,效果不起作用。
标签: javascript angular ngrx ngrx-effects