【发布时间】:2018-09-10 13:04:03
【问题描述】:
我有一个端点,可以检索帖子的所有 cmets,并且在该列表中,每个评论都有 user_id 属性,因此我会再次调用来检索用户信息,例如姓名或电子邮件。这是我使用 forkJoin 和 flatMap 实现的。
getCommentsList() {
return this.http.get("COMMENTS_ENDPOINT")
.map(res => res.json())
.flatMap(comments => Observable.forkJoin(comments.map(comment => this.getUserDetail(comment.user_id)
.map(user => (comment.user = user, comment))))));
}
getUserDetail(id) {
return this.http.get("USER_ENDPOINT/id")
.map(res => res.json());
}
虽然这可以正常工作,但当同一用户多次评论时,会重复调用用户端点。当要检索相同的用户数据时,如何存储用户数据并使用它?我试过了
storedUsers:any = {};
getUserDetail(id) {
if (this.storedUsers[id]) {
console.log("using cache");
return Observable.of(this.storedUsers[id]);
}
return this.http.get("USER_ENDPOINT/id")
.map(res => res.json())
.do(user => this.storedUsers[user.id] = user);
}
但从不在控制台中使用缓存记录。
【问题讨论】:
-
你读过这个 SO 问题吗? stackoverflow.com/q/36271899/7407935
标签: javascript angular react-native rxjs observable