我有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;
}
}
如何等待服务中的所有异步函数将其包含在组件中?
现在组件工作得更快,然后服务得到响应。
因此,只有在此服务中加载了所有数据后,我才需要在组件中使用服务
答案 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”响应并将其初始化一次。