angular - 如何在 Angular 7 中检查服务调用是否已完成?
问题描述
假设我在 ngOnInit 生命周期钩子上有一个特定的 fetch 服务调用。但是在该调用给出响应之前,我切换到另一个组件并返回到相同的第一个组件,因此另一个获取服务调用发生了。
我有一个附加到服务调用的 ngx-ui-loader。现在发生了什么,第一个服务调用给出了响应,因此加载程序停止,但 UI 没有更新。当第二个服务调用给出响应时,UI 得到了更新。
因此,在停止的加载程序和更新的 UI 之间存在一些时间延迟。
如何防止这种情况?或者
如何检查是否有任何相关的服务调用已经在进行中,然后我们可以再次订阅它并获得响应并更新 UI?
代码:component.ts
user:any = [];
ngOnInit() {
this.commonService.getUserList().subscribe(response => {
this.users = response.body;
});
}
组件.html
<ng-container *ngFor="let user of users">
<p>{{ user }}</p>
</ng-container>
解决方案
您可以重构您的服务以重用数据。以这种方式,在您描述的场景中,这将只是一个 http 调用
private userList$ = this.http.get<User[]>('url').pipe(shareReplay(1));
public getUserList() {
return this.userList$;
}
推荐阅读
- java - 在 Java 上运行 ChromeDriver 或 FirefoxDriver for Selenium 的问题
- python - 无需浏览器通过 Python (jQuery/Ajax) 控制网站 (html/javascript)
- r - 删除标题中包含特定字符的列,同时将这些列下的值移动到最近的左侧列
- file - Sybase ASE isql - 从输出中删除空白的第一列到 csv 文件
- flutter - 如何强制 ScrollController 重新计算 position.maxExtents?
- android - Gradle 和 mavenLocal 的跨模块依赖
- reactjs - 如何在 Spring Boot 中建立 React JS 和 Apache Kafka 之间的连接?
- angular - 样式绑定使用“样式”。Angular 中子元素的语法
- excel - 如何将数据从工作表复制到另一个工作表?
- docusignapi - 信封:listStatusChanges 不遵守 order_by 参数