如何在下面的mergeMap中添加null过滤器?

问题描述

我编写了订阅服务,并从中获取了价值形式,然后调用了另一个API。但是第一个订阅API发生了变化。现在,值可以为null。那么,我该如何处理呢?现在,代码oc.id中出现编译错误,或者可以为null。

 getE$ = createEffect(() => this.actions$.pipe(
ofType(ActionType.A),switchMapTo(this.store.select(selectP)),mergeMap((oc) => this.reviewService.findByR(oc.id,new Date(new Date()),'A')
  .pipe(
    mergeMap(d => {
      return of(LoadSuccess({ reviews: getReviews(d) }));
    }
    ),catchError(error => {
      return of(LoadFailure({ error: error }));
    })
  )
)));

解决方法

要过滤出API现在可能返回的null值,我们想在对filter和{{1的调用之间}}。

switchMapTo

mergeMap是一个函数,用于测试每个元素,并以类型保护的形式传播该信息。在处理数组时,该技术也很有用

import {filter} from 'rxjs/operators';

getE$ = createEffect(() => this.actions$.pipe(
    ofType(ActionType.A),switchMapTo(this.store.select(selectP)),// remove `null` or `undefined` elements
    filter(notNullOrUndefined)
    // safely dereference `oc`
    mergeMap(oc => this.reviewService.findByR(oc.id,new Date(new Date()),'A'
        )
        .pipe(
            mergeMap(d => of(LoadSuccess({ reviews: getReviews(d) }))),catchError(error => of(LoadFailure({ error: error })))
        )
    )));