ngrx 效果 - 两个 http api 效果相同
ngrx effect - two http api in same effect
我使用 update
api (这个 api returns 对象的 id 更新对象的一部分,我有以下效果,然后我使用 findById
api 获取整个对象,我将 api 更新的结果作为参数传递给它,问题是我第一次更新 findById
api returns 没有更新的对象,知道更新完成了
@Effect()
updateScopeCoverage$ = this.actions$.pipe(
ofType<networksActions.PatchScopeCoverage>(networksActions.NetworkActionTypes.PATCH_SCOPE_COVERAGE),
map(action => action.payload),
exhaustMap(scopeCoverage => this.apiNetwork.update({ updateScopeCoverageRequest: scopeCoverage }).pipe(
switchMap(id => this.apiNetwork.findById({ externalId: id }).pipe(
map((network: Network) => new networksActions.PatchSuccess({
id: network.externalId,
changes: network
})),
)),
catchError(err => {
alert(err.message);
return of(new networksActions.Failure({ concern: 'PATCH', error: err }));
})
))
);
findById(args: { externalId: string }): Observable<models.Network> {
const path = `/networks/v1.0/${args.externalId}`;
return this.http.get<models.Network>(`${this.domain}${path}`);
}
如果我理解正确 - 后端 returns 旧数据,是否正确?因为效果看起来不错。它发送更新请求,等待响应,然后发送 findById,等待它并调度 PatchSuccess 操作。顺序是正确的。我会 console.log 什么后端 returns 如果它 returns 旧数据 - 这意味着后端有缓存或复制。例如,尝试在 switchMap(id => findById) 之前放置 delay(1000),如果有效,则 100% 是后端问题。
我使用 update
api (这个 api returns 对象的 id 更新对象的一部分,我有以下效果,然后我使用 findById
api 获取整个对象,我将 api 更新的结果作为参数传递给它,问题是我第一次更新 findById
api returns 没有更新的对象,知道更新完成了
@Effect()
updateScopeCoverage$ = this.actions$.pipe(
ofType<networksActions.PatchScopeCoverage>(networksActions.NetworkActionTypes.PATCH_SCOPE_COVERAGE),
map(action => action.payload),
exhaustMap(scopeCoverage => this.apiNetwork.update({ updateScopeCoverageRequest: scopeCoverage }).pipe(
switchMap(id => this.apiNetwork.findById({ externalId: id }).pipe(
map((network: Network) => new networksActions.PatchSuccess({
id: network.externalId,
changes: network
})),
)),
catchError(err => {
alert(err.message);
return of(new networksActions.Failure({ concern: 'PATCH', error: err }));
})
))
);
findById(args: { externalId: string }): Observable<models.Network> {
const path = `/networks/v1.0/${args.externalId}`;
return this.http.get<models.Network>(`${this.domain}${path}`);
}
如果我理解正确 - 后端 returns 旧数据,是否正确?因为效果看起来不错。它发送更新请求,等待响应,然后发送 findById,等待它并调度 PatchSuccess 操作。顺序是正确的。我会 console.log 什么后端 returns 如果它 returns 旧数据 - 这意味着后端有缓存或复制。例如,尝试在 switchMap(id => findById) 之前放置 delay(1000),如果有效,则 100% 是后端问题。