我从Web服务获取整个菜单,这是巨大的。它有> 10000件物品。首先,我想根据用户点击的内容做出请求,但由于它是一个菜单,因此会有很多点击和大量请求。所以我想,最好只加载完整的结构,然后根据需要查询那个巨大的json。
我的想法是,当我第一次调用该服务时,它会检查它是否有任何数据。如果没有,则发出http请求并将数据映射到服务中的变量。然后,当我需要子类别或其他什么时,我查询该数据,我不需要为菜单制作数百个http请求。但是,我觉得我做得还不好。它有效,但看起来很糟糕。特别是我期望数据存在的部分(参见下面的getSubCategories
方法)。这是代码,请随时通知我,如果有任何严重问题或提供改进代码的想法:
getMainCategories() {
if (this.dataStore.length > 0) {
return of(this.generateMainCategories(this.dataStore));
} else
if (this.observable) {
return this.observable;
} else {
this.observable = this.http.get<ICategory[]>(`${this.apiUrl}/categories`).pipe(
tap(() => {
console.log('"getCategories" service called.');
}),
map((data) => {
this.observable = null;
this.dataStore = data;
return this.generateMainCategories(this.dataStore);
})
).share();
return this.observable;
}
}
getSubCategories(_id: string) {
if (this.dataStore.length > 0) {
return of(this.dataStore.find(x => x.TermCategoryUrl === _id));
} else {
return this.getMainCategories().pipe(
map((data) => {
return this.dataStore.find(x => x.TermCategoryUrl === _id);
})
);
}
}