在ngrx效果中switchMap取消选项http请求

时间:2018-06-30 21:12:45

标签: angular xmlhttprequest rxjs ngrx-effects

我有一个类似ngrx的效果:

@Effect()
  throwError$: Observable<Action> = this.actions$.pipe(
    ofType<notificationActions.ErrorThrow>(
      notificationActions.ActionTypes.ThrowError
    ),
    tap(() => {
      this.store.dispatch(new masterActions.LoadingHide());
      this.sub = this.devTools.liftedState.subscribe(data => {
        this.errorLogService.addErrorLog(JSON.stringify(data)).subscribe(data2 => console.log('data2', data));
        console.log(JSON.stringify(data));
      });
    }),
    map(action => action.payload),
    tap(() => {
      this.sub.unsubscribe();
    }),
    mergeMap(error => {
      return of(
        new notificationActions.ErrorAdd({
          type: error.type,
          description: error.description
        })
      );
    })
  );

errorLogService的addErrorLog方法发送一个http发布请求,用于将错误日志存储到数据库中。一切都在进行这样的请求,首先是一个选项请求,然后是发布请求,但是如果我切换到switchMap来结合两个可观察对象,则当我在chrome dev工具的“网络”标签上对其进行检查时,选项请求将被取消。

这是重构代码的一部分

tap(() => {
      this.store.dispatch(new masterActions.LoadingHide());
      this.sub = this.devTools.liftedState
        .pipe(
          switchMap(data => {
            console.log('data', data);
            return this.errorLogService.addErrorLog(JSON.stringify(data));
          })
        )
        .subscribe();
    })

任何线索?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。用switchMap代替mergeMap对我来说已经完成了,现在每个HTTP请求都等待完成。