在我的 Angular 8 应用程序中,我调用 Api 服务,然后将数据写入 Akita 实体存储以用于后续请求。我通过使用 mergeMap 以同步方式发送请求来做到这一点。
我有一些额外的请求,我希望通过 forkJoin 与此函数以并发方式执行,但是,我发现 akita selectAll 函数存在以下问题,不会触发 onCompleted 函数/事件。它返回数据,但 onCompleted 永远不会触发。让 Observable 处于不完整状态。
如果我删除对秋田实体商店的调用。我可以看到对 getTeams Observable 函数的 Api 调用已完成。我向 akita 实体存储调用添加了调试代码,并看到 onCompleted 从未触发。我不确定为什么,但也许我做错了什么。
功能:
getTeams(): Observable<Team[]> {
return this.teamApiService.getTeams().pipe(
mergeMap((teams) => {
this.teamStore.set(teams);
return this.teamQuery.selectAll({ sortBy: 'name' });
})
);
}
调用函数:
this.teamStateService.getTeams().subscribe(
data => console.log('GOT getTeams:', data),
err => console.log('Error:', err),
() => console.log('getTeams: Completed')
);
我应该看到以下结果:
GOT getTeams: ....
getTeams: Completed
但是,我刚刚得到
GOT getTeams: ....
最佳答案
您可以强制它完成。您可以添加take(1)
:
返回 this.teamQuery.selectAll({ sortBy: 'name' }).pipe(take(1));
关于angular - Akita Observable OnCompleted 从不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56779866/