如何用未弃用的方法替换 rxJs 中的方法 'combineLatest'?

How to replace method 'combineLatest' from rxJs with a not deprecated method?

我使用 combinlatest rsjx/operator 一个实现了方法,它工作正常但是给出的声纳问题表明它 deprecated.so ,我需要将它转换为最新的一个。但我尝试了,只是替换它给出了错误的导入。我需要一些专家的帮助才能做到这一点。

gX$ = createEffect(() => this.actions$.pipe(
    ofType(ActionType.A),
    combineLatest(this.service.getoc()),
    mergeMap(([, oc]) => this.reviewService.findBy(oc.id,
      new Date(),
      new Date(new Date().setDate(new Date().getDate() + 1)))
      .pipe(
        mergeMap(d => {
          return of(reviewLoadSuccess({ reviews: getReviews(d) }));
        }
        ),
        catchError(error => {
          return of(reviewLoadFailure({ error: error }));
        })
      )
    )));

因为您似乎只需要 this.service.getoc() 返回的值,我建议改用 switchMapTo 运算符,如下所示

 gX$ = createEffect(() => this.actions$.pipe(
   ofType(ActionType.A),
   switchMapTo(this.service.getoc()),
   mergeMap(oc => this.reviewService.findBy(oc.id,
     new Date(),
     new Date(new Date().setDate(new Date().getDate() + 1)))
     .pipe(
       mergeMap(d => {
         return of(reviewLoadSuccess({ reviews: getReviews(d) }));
       }
       ),
       catchError(error => {
         return of(reviewLoadFailure({ error: error }));
       })
     )
   )));

如果您也想使用该操作,请考虑应用以下更改:

gX$ = createEffect(() => this.actions$
  .pipe(
    ofType(ActionType.A),
    switchMap(action => this.service.getoc().pipe(
      switchMap(oc => {
        //  you have access to both action, and oc
        // ... continue running your code
      })
    ))
  )
)

您需要从 rxjs 而不是 rxjs/oeprators 导入并像这样使用它:

import { combineLatest } from 'rxjs';

combineLatest([
  this.actions$.pipe(ofType(ActionType.A)),
  this.service.getoc()
]).pipe(mergeMap(...));