内部可观察到的未更新

时间:2020-08-24 00:17:38

标签: rxjs rxjs-observables

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

1 个答案:

答案 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。