【问题标题】:RxJS - Tell observable to wait for other observable to emit non null valueRxJS - 告诉 observable 等待其他 observable 发出非空值
【发布时间】:2021-12-03 06:12:28
【问题描述】:

我有这个设置器,它分配一个可观察到的类成员systemAreasOptions$。我在那里这样做是因为它需要等待mappedItem$ 有一个不为空的发射。我最初在班级级别分配了systemAreasOptions$,但它没有等待mappedItem$。由于某种原因,在使用asyncPipe 时,我什至无法让 HTML 重新呈现。我如何告诉一个 observable (systemAreasOptions$) 等待另一个 observable (mappedItem$),而不是仅仅将它分配到另一个发出的位置?

public set mappedItem(mappedItem: IPermissionsMappedItem) {
    mappedItem.hydrate$Permissions().then(_ => {
        this.mappedItem$.next(mappedItem);
        this.systemAreasOptions$ = from(
            this.lookupService.SYSTEM_AREAS.toNestedLookup()
                .$promise as unknown as Observable<IPermissmissionsLookup[]>
        ).pipe(
            map(systemAreas => orderBy(systemAreas,systemArea => systemArea?.label?.toLowerCase())),
            map(systemAreas => systemAreas.map(area => ({
                ...area,
                permissions: this.getPermissionsForArea(area.id)
            }))),
            shareReplay(1),
            tap(console.log)
        );

        this._subscriptions.add(
            this.systemAreasOptions$.subscribe(
                this.systemAreasOptionsBehaviourSubject$)
        );
    });
}

【问题讨论】:

    标签: angular rxjs rxjs6 angular11


    【解决方案1】:

    你可以组合 observables:

    • 创建一个只发出不为空的 mappedItems 的 observable
    • 仅在发射时发射这两个值

    我相信你正在寻找 withLatestFrom:

    higherOrder$ = mappedItemThatIsNotNull$.pipe(
      withLatestFrom(systemAreasOptions$)
    ) 
    

    在您的模板中:

    higherOrder$ | async
    

    这将产生 [mappedItem, systemAreaOptions]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2021-11-16
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多