代码之家  ›  专栏  ›  技术社区  ›  uma

如何将rxJs中的方法“combineLatest”替换为未弃用的方法?

  •  0
  • uma  · 技术社区  · 4 年前

    我使用 combinlatest rsjx/operator one,它工作正常,但由于声纳问题,它已被弃用。因此,我需要将其转换为最新版本。但我试着,只是替换导入它就出错了。我需要一些专家的帮助来做这件事。

    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 }));
            })
          )
        )));
    
    1 回复  |  直到 4 年前
        1
  •  4
  •   Mike Jerred    4 年前

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

    import { combineLatest } from 'rxjs';
    
    combineLatest([
      this.actions$.pipe(ofType(ActionType.A)),
      this.service.getoc()
    ]).pipe(mergeMap(...));
    
        2
  •  1
  •   Rafi Henig    4 年前

    因为看起来你只需要返回的值 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
          })
        ))
      )
    )