无限滚动的可观察数组合并
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 并以不同的方式处理业务需求以解决此报告的问题。
在 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 并以不同的方式处理业务需求以解决此报告的问题。