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方法是否已经做到了这一点?@ggui
this.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();
}