我具有使用update
api更新对象的一部分的以下效果(此api返回该对象的id),然后使用findById
api获得整个对象,并将结果传递给api更新作为参数,问题是我第一次执行更新时,findById
api知道更新已完成,但返回了没有更新的对象
@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}`);
}
如果我理解正确-后端返回旧数据,对吗?因为效果看起来不错。它发送一个更新请求,等待响应,然后发送findById,等待,然后分派PatchSuccess操作。顺序正确。我会console.log什么后端返回,如果它返回旧数据-这意味着后端的缓存或复制。例如,尝试将delay(1000)放在switchMap(id => findById之前,如果可以,则100%出现后端问题。