Angular 如何确保阵列中不存在重复的对象?
我正在学习使用Angular 如何确保阵列中不存在重复的对象?,angular,rxjs,reactive-programming,Angular,Rxjs,Reactive Programming,我正在学习使用RxJs的Reactive Programming,需要一些帮助来找到适合这种情况的最佳操作员。我正在开发一个angular 4应用程序,并采用以下方法: ngAfterViewInit() { this.returnUsers(); } returnUsers() : void { this.userService.ListUsers(this.token) .subscribe(response => {
RxJs
的Reactive Programming
,需要一些帮助来找到适合这种情况的最佳操作员。我正在开发一个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
操作符,也只搜索了不重复的对象,但我仍然在点击服务器
编辑:
Im正在使用您是否在每个滚动事件上调用
scrollDown()
方法
如果是这样,那么您将为每个滚动事件创建一个新订阅,这可能不是您想要的。我认为您需要使用
Subject
实例并在每个滚动事件上推送一个值。然后,您可以使用去BounceTime(100)
来丢弃到达过快且只有一个订阅的排放
类似这样的东西(显然我没有测试这段代码,但我希望你能明白这一点)
你试过distinctuntilchange吗?我现在试过了,然后我将节流时间(在我使用的滚动组件的模板中)更改为10ms,并且仍然多次重复向服务器发出请求。它成功了,martin,谢谢。我只是不明白为什么我需要把
这个.subject$.next()放进去在subscribe行之后的构造函数中使用code>,以获得第一个结果。在构造函数上调用subscribe方法是否已经做到了这一点?@gguithis.subject$.next()
在scrollDown()
方法中,而不是在构造函数中
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();
}