如何等待服务响应?

时间:2019-12-27 14:29:04

标签: angular angular8

我有singltone服务,里面有同步方法。

当我向组件注入服务时

constructor(
   private reonMapLibraryService: ReonMapLibraryService
) {}

我无法访问:reonMapLibraryService.data;,因为它是异步功能:

public data: any[] = [];

get() {
   Promise.all([
      fetch(`assets/search-tree.json`, {
         cache: "no-cache",
         mode: "cors"
      }).then<SearchTreeNode>(res => res.json()) {
         this.data = res;
      }
   }

如何等待服务中的所有异步函数将其包含在组件中?

现在组件工作得更快,然后服务得到响应。

因此,只有在此服务中加载了所有数据后,我才需要在组件中使用服务

2 个答案:

答案 0 :(得分:3)

您可以从资产文件夹中导入 JSON文件。

import * as data from 'assets/search-tree.json';

答案 1 :(得分:1)

在我看来,创建远程服务似乎是一种非常奇怪的方法。

请查看this tutorial from the documentation,以了解如何创建可进行远程呼叫的服务。

您的服务应与此类似:

getData() {
  // now returns an Observable of SearchTreeNode
  return this.http.get<SearchTreeNode>('assets/search-tree.json');
}

,然后在需要时订阅Observable:

initData() {
  this.reonMapLibraryService.getData()
    .subscribe((data: SearchTreeNode) => this.data = data);
}

如果您仍然希望您的服务成为一种“单身人士”,则可以结合使用BehaiourSubject来维护相同的“ Obervable”响应并将其初始化一次。