Inifinite-scroll的Observable Array合并

时间:2017-02-01 05:30:02

标签: angular rxjs observable infinite-scroll angular-meteor

在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个联系人时,此代码可以正常工作。但在那之后,evertime,它保持前20个联系人和新接触的联系人被findContacts()方法的新20个联系人替换。

所以它总是只显示40个联系人。无论如何要继续追加/合并联系人到现有的联系人列表?非常感谢任何帮助。

谢谢, Annadurai。

1 个答案:

答案 0 :(得分:0)

问题的根本原因是由于在我的情况下执行mergeMap时的性能问题。我已删除mergeMap并以不同方式处理业务需求以解决此报告的问题。