@angular @ ngrx/effects HTTP请求保持取消和重试

spy*_*ter 1 ngrx ngrx-effects angular

我有一个非常简单的效果,它产生一个http请求,并在完成后调度一个动作.

HTTP请求不断被取消并反复重新制作.

在此输入图像描述

最初我以为是导致问题的switchMap(取消了observable)所以我尝试使用mergeMap(相同的结果).

下面是我的效果代码.

signIn$ = this.actions$
  .ofType(ACTIONS.AUTH.SIGN_IN)
  .map(toPayload)
  .map(payload => toInput(payload))
  .switchMap(input => this.http
      .post<Output>(`${GLOBALS.endpoint}/auth/authenticate`, input)
      .map(output => ({ type: ACTIONS.APP.PUSH_NOTIFICATION, payload: "test" }))
      .catch(error => of(createAction(ACTIONS.APP.LOG_EXCEPTION, error)))
  );
Run Code Online (Sandbox Code Playgroud)

上面的代码编译没有错误,并按预期工作,除了它不断取消和重新生成http请求的事实.

我不知道它是否重要,但我使用的是HttpClient(@ angular/common/http),而不是@ angular/http.

任何建议将不胜感激!

ita*_*ded 5

"switchMap"有自己的"取消订阅"机制来取消api请求,

使用"flatMap"(或mergeMap)代替应该适合你.