2017-01-30 106 views
0

我正在嘗試在列出聯繫人的Ionic2 + Meteor移動應用程序中進行無限滾動。在以下代碼中,findContacts()函數一次返回10個聯繫人。 聯繫人:Observable;combine RxJs Observable array

findContacts() :Observable<Contact[]> { 
    /* logic to pull Contacts is here ...*/ 
    } 

    this.contactsSub = MeteorObservable.subscribe('contacts', options).subscribe(() => { 
     MeteorObservable.autorun().subscribe(() => { 
     if(!this.contacts) { 
      this.contacts = this.findContacts(); 
     } 
     }); 
    }); 

每次用戶滾動到列表末尾並獲取下10個聯繫人時,都會調用此代碼。但是,這裏的主題是,它不是追加到已經列出的聯繫人。它只顯示新拉動的10個聯繫人。我嘗試了Observable.concat,但它沒有給出妨礙結果。當我嘗試mergeMap時,它會將其循環和錯誤輸出。 請你讓我知道如何concacate Observable數組對象?任何幫助是極大的讚賞。這個問題我堅持了一個多星期了。 謝謝。

+0

隨着下面的行,則替換每個滾動結束現有contats實現此目的。 if(this.contactsSub){ this.contactsSub.unsubscribe(); } this.contactsSub = MeteorObservable.subscribe( '聯繫人',選項).subscribe(()=> { MeteorObservable.autorun()。訂閱(()=> { 如果(this.contacts){ 此.contacts = this.contacts.concat(this.findContacts()); } else { this.contacts = this.findContacts(); } }); }); – annadurai

回答

0

可以通過改變接點爲一個數組

contacts: Array<any>= [] 
findContacts() :Observable<Contact[]> { 
    /* logic to pull Contacts is here ...*/ 
    } 

    this.contactsSub = MeteorObservable.subscribe('contacts', options).subscribe(() => { 
     MeteorObservable.autorun().subscribe(() => { 
      this.findContacts().subscribe(data => { 
       this.contacts = this.contacts.concat(data); 
     }); 
     }); 
    }); 
+0

感謝Sudheer的更新。似乎訂閱功能不能用於findContacts。但是根據你的代碼示例,我嘗試了以下內容: 這似乎並沒有引發任何錯誤。我還刪除了我上面訂閱的取消訂閱電話似乎不斷添加數據到現有的Observable 。但是,它似乎只適用於300個記錄/聯繫人。之後,它似乎凍結了申請。我不確定是否對無限滾動有任何限制。 – annadurai

+0

最長的陣列可能有232-1 = 4,294,967,295 = 42.9億元素。所以它與打字稿數組最大尺寸無關。這可能是其他原因。 –

+0

通過以下幾行,它將在每個滾動結束時替換現有的內容。 if(this.contactsSub){ this.contactsSub.unsubscribe(); } this.contactsSub = MeteorObservable.subscribe( '聯繫人',選項).subscribe(()=> { MeteorObservable.autorun()。訂閱(()=> { 如果(this.contacts){ 此.contacts = this.contacts.concat(this.findContacts());} 否則{ this.contacts = this.findContacts();} }); }); – annadurai