在Angular 8应用程序中,我调用了Api服务,然后将数据写入秋田实体商店以用于后续请求。我通过使用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: ....
答案 0 :(得分:1)
您可以强制完成它。您可以添加take(1)
:
return this.teamQuery.selectAll({ sortBy: 'name' }).pipe(take(1));