我正在使用rxjs来获取注册人及其相关的服务和服务映像,但是当服务得到更新时,它并没有反映在我的可观察范围内?
有人能弄清楚为什么,我做错了吗?
我必须继续写东西,因为除非我写下冗余的多余信息供读者阅读,否则stackoverflow不会让我发帖。
that._registrantsSubscription = that.userForumRegistrantService.getRegistrants(forum.uid, forum.forumId)
.switchMap(registrants => {
if (registrants && registrants.length > 0) {
let observables = registrants.map(registrant => {
let getService$ = that.userServiceService.getService(registrant.uid, registrant.serviceId);
let getDefaultServiceImages$ = that.userServiceImageService.getDefaultServiceImages(registrant.uid, registrant.serviceId);
return combineLatest(getService$, getDefaultServiceImages$)
.switchMap(results => {
const [service, defaultServiceImages] = results;
if (service){
if (defaultServiceImages && defaultServiceImages.length > 0)
service.defaultServiceImage = of(defaultServiceImages[0]);
else {
let tempImage = {
tinyUrl: '../../../assets/defaultTiny.jpg',
name: 'No image'
};
service.defaultServiceImage = of(tempImage);
}
return of(service);
}
else return of(null);
}
);
});
return zip(...observables, (...results) => {
return results.map((result, i) => {
if (result)
registrants[i].service = of(result);
else
registrants[i].service = of(null);
return registrants[i];
});
});
}
else
return of([]);
})
.subscribe(registrants => {
that.registrants = of(registrants);
}
);
public getRegistrants(parentUserId: string, forumId: string): Observable<any[]> {
return this.afs.collection<any>(`users/${parentUserId}/forums/${forumId}/registrants`, ref => ref.orderBy('creationDate', 'desc')).valueChanges();
}
public getService (parentUserId: string, serviceId: string): Observable<any> {
return this.afs.collection(`users/${parentUserId}/services`).doc(serviceId).valueChanges();
}
public getDefaultServiceImages (parentUserId: string, serviceId: string): Observable<any> {
return this.afs.collection<any>(`users/${parentUserId}/services/${serviceId}/images`, ref => ref.where('default', '==', true).limit(1)).valueChanges();
}
答案 0 :(得分:0)
我更改了这段代码:
return zip(...observables, (...results) => {
return results.map((result, i) => {
if (result)
registrants[i].service = of(result);
else
registrants[i].service = of(null);
return registrants[i];
});
});
对此:
return combineLatest(...observables, (...results) => {
return results.map((result, i) => {
if (result)
registrants[i].service = of(result);
else
registrants[i].service = of(null);
return registrants[i];
});
});
现在可以使用了!
不知道为什么,我仍然必须认真研究rxjs。