如何确保不在数组中连接重复的对象?

时间:2017-04-11 13:15:49

标签: angular rxjs reactive-programming

我正在使用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

1 个答案:

答案 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}}