首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ngrx @Effects -立即停止

Ngrx @Effects -立即停止
EN

Stack Overflow用户
提问于 2018-08-03 18:24:51
回答 2查看 2K关注 0票数 3

我有以下ngrx效果。在"map“中,我有一个条件。如何在不继续mergeMap的情况下立即停止效果。

代码语言:javascript
复制
@Effect()
myEffect$: Observable < Action > = this.actions$.pipe(
  ofType('INIT_ACADEMY_DOMAIN'),
  map((action: any) => {
    const url = 'http://www.academy.xyzq';
    if (1 === 1) {
      // Make this effect stop immediately and do nothing more
    }
    action.url = url;
    return action;
  }),
  mergeMap((action: any) =>
    this.http.get(action.url).pipe(
      switchMap((data: any) => {
        return [{
          type: 'INIT_ACADEMY',
          payload: {
            academy: data.academy
          }
        }];
      })
    )),
  catchError(() => of ({
    type: 'INIT_IT_FAILED'
  }))
);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-03 18:43:53

代码语言:javascript
复制
You can try like this.

@Effect()
myEffect$: Observable < Action > = this.actions$.pipe(
  ofType('INIT_ACADEMY_DOMAIN'),
  map((action: any) => {
    const url = 'http://www.academy.xyzq';
    if (1 === 1) {
      // Make this effect stop immediately and do nothing more
      return null;
    }
    action.url = url;
    return action;
  }),
  mergeMap((action: any) =>
    if(action){
    return this.http.get(action.url).pipe(
      switchMap((data: any) => {
        return [{
          type: 'INIT_ACADEMY',
          payload: {
            academy: data.academy
          }
        }];
      })
      } else{
        return null;
      }
    )),
  catchError(() => of ({
    type: 'INIT_IT_FAILED'
  }))
);
票数 1
EN

Stack Overflow用户

发布于 2018-08-21 16:42:21

您应该考虑使用filter函数来根据您的条件过滤出操作:

代码语言:javascript
复制
@Effect()
myEffect$: Observable < Action > = this.actions$.pipe(
  ofType('INIT_ACADEMY_DOMAIN'),
  filter((x) => 1 === 1),
  mergeMap((action: any) =>
    this.http.get(action.url).pipe(
      switchMap((data: any) => {
        return [{
          type: 'INIT_ACADEMY',
          payload: {
            academy: data.academy
          }
        }];
      })
    )),
  catchError(() => of ({
    type: 'INIT_IT_FAILED'
  }))
);

或者,如果您的条件为真,您可以只分派一个新的操作,并创建一个更简单的效果来执行mergeMap函数中的部分。

你应该尽量保持你的效果尽可能简单。如果你的效果做了很多逻辑/条件检查,很难找到一个合适的名称来捕捉效果的真正作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51670594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档