如何有效地结合存储状态读取MergeMap中的观察者?

我想处理有效的动作并根据最新状态执行一些逻辑。有一些示例,但是我在正确接收MergeMap中的数据时遇到问题。

@ ngrx /商店8.1。

@Injectable()
export class SitesEffects {

    constructor(
        private sitesService: SitesService,private actions$: actions,private store: Store<AppState>) {
    }


    getDataForSites$: Observable<action> = createEffect(() =>
        this.actions$.pipe(
            ofType(LoadSites),map(action => action.siteIds),//siteIds is string[]
            withLatestFrom(siteIds => this.store.select(selectSites,new SiteIds(siteIds))),// items return from selector are Site[]
            mergeMap(([a,b]) => {
                // do some logic based on current state
                console.log(a);
                console.log(b);
                return of(SitesLoaded(new Sites([])));
            })

        )
    );
}

我希望'a'是第一个地图函数(字符串数组)的siteIds b是站点数组(withLatestFrom中的Site []) 但 b在Visual Studio代码中有错误

  

类型“可观察”必须具有“ Symbol.iterator”方法   返回iterator.ts(2488)

并且在控制台(开发工具)中存在错误TypeError:undefined不是一个函数(对于mergeMap(([[a,b])=>

应如何对齐所有这些功能,以实现我希望在mergeMap运算符中收到的功能?

zhanlongjie 回答:如何有效地结合存储状态读取MergeMap中的观察者?

使用switch / merge映射而不是withLatestFrom

  switchMap(siteIds =>   this.store.select(selectSites,new SiteIds(siteIds))).pipe(first(),map(sites => [siteIds,sites])))

您将获得实际状态和ID。使用第一个运算符,您可以使用第一个发射(商店中的最后一个值)来完成内部可观测值

本文链接:https://www.f2er.com/3156775.html

大家都在问