我正在使用Reactive Programming
学习RxJs
并需要一些帮助才能找到适合这种情况的最佳运算符。我正在开发一个angular 4
应用程序并使用此方法:
ngAfterViewInit() {
this.returnUsers();
}
returnUsers() : void {
this.userService.ListUsers(this.token)
.subscribe(response => {
this.token = response.token;
this.users = this.users.concat(response.users);
});
}
scrollDown() {
this.returnUsers();
}
功能还可以,问题是,如果用户滚动得太快,我发送给服务器的令牌是相同的,所以我连接重复的对象。我想知道如何处理它是最好的方法。我尝试使用.filter
运算符,只是没有重复的对象,但我仍在点击服务器。
编辑: 我正在使用angular2-infinite-scroll
答案 0 :(得分:1)
您是否在每个滚动事件上调用Subject
方法?
如果是这样,那么您为每个可能不是您想要的滚动事件制作新订阅
我认为您需要使用debounceTime(100)
实例并在每个滚动事件上推送一个值。然后,您可以使用private subject$ = new Subject();
constructor() {
this.subject$
.debounceTime(100)
.concatMap(() => this.userService.ListUsers(this.token))
.subscribe(response => {
this.token = response.token;
this.users = this.users.concat(response.users);
});
});
}
scrollDown() {
this.subject$.next();
}
来放弃过快到达的排放,并且只需订阅一次。
像这样的东西(显然我没有测试过这段代码,但我希望你能明白这一点。)
{{1}}