无限滚动的可观察数组合并

Observable Array merge for Inifinite-scroll

在 Ionic2+Angular2+Meteor 移动应用程序中,联系人以无限滚动选项列出。联系人应该在滚动期间以 20 个为一组附加。

    import {Observable} from "rxjs";
    contacts: Observable<Contact[]>;

    /* code to pull Contacts from collection */
    findContacts() :Observable<Contact[]> {
            return Contacts.find({accessGroup: {$in: this.sourcingUser.accessGroup}
                                          }, {sort: {firstName: 1}} )
                      .mergeMap<Contact[]>(contacts =>
                          Observable.combineLatest(
                            ...contacts.map(contact =>
                                Suppliers.find({supplierId: contact.supplierId})
                                .startWith(null)
                                .map(suppliers => {
                                    if(suppliers){
                                      contact.supplier = suppliers[0];
                                    }
                                    return contact;
                                })
                              ))).zone();      
     }


      // Code to append contacts
      this.contactsSub =  MeteorObservable.subscribe('contacts', options).subscribe(() => {
          MeteorObservable.autorun().subscribe(() => {
              if(!this.contacts){
                  this.contacts = this.findContacts();
              } else {
                  this.contacts = this.contacts.merge(this.findContacts());
              }
         });
      });

当显示前 20 个联系人并附加接下来的 20 个时,此代码工作正常。但在那之后,它始终保留前 20 个联系人,并且新添加的联系人会被 findContacts() 方法中的新 20 个联系人替换。

所以它总是只显示 40 个联系人。有没有办法将 append/merge 联系人保留到现有联系人列表中?非常感谢任何帮助。

谢谢, 安纳杜赖.

问题的根本原因是在我的案例中执行 mergeMap 时的性能问题。我删除了 mergeMap 并以不同的方式处理业务需求以解决此报告的问题。