内部可观察到的未更新

问题描述

我正在使用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();
}

解决方法

我更改了这段代码:

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,i) => {
      if (result)
        registrants[i].service = of(result);
      else
        registrants[i].service = of(null);
      return registrants[i];
    });
});

现在可以使用了!

不知道为什么,我仍然必须认真研究rxjs。