당신은 사용하여 문제를 해결할 수 있어야 throttle
operator - 그 관찰이 방출 될 때까지, 소스에 의해 방출되는 모든 값은 무시/스로틀하여, 관측을 반환하고 함수를 걸립니다.
throttle
에 효과를 전달하면 느린 요청이 처리되는 동안받은 모든 동작이 무시됩니다. 예를 들면 : 당신이 당신의 HTTP 기반의 효과를이 방법으로 throttle
를 사용하는 경우
import 'rxjs/add/operator/throttle';
@Effect()
someEffect = this.actions
.ofType(SOME_REQUEST)
.throttle(() => this.someEffect)
.switchMap((action) => someSlowRequest(action.payload)
.map((result) => ({ type: SOME_RESPONSE, payload: result }))
.catch((error) => Observable.of({ type: SOME_ERROR, payload: error }))
);
, 그것은 보류중인 HTTP 요청이있는 경우 효과가 무시 트리거 조치를 볼 수 있습니다. 따라서 그것이 당신이 추구하는 행동이라면, 그것은 당신의 문제를 해결해야합니다. 귀하의 코멘트에 대해서는
, 당신은 밀접하게 간격 행동의 마지막이 처리되도록하려면, 당신은 사용을 고려 수 auditTime
operator - 지정된 시간 동안 대기 한 후 가장 최근에 수신 된 값 방출되는 :
import 'rxjs/add/operator/auditTime';
@Effect()
someEffect = this.actions
.ofType(SOME_REQUEST)
.auditTime(100)
.switchMap((action) => someSlowRequest(action.payload)
.map((result) => ({ type: SOME_RESPONSE, payload: result }))
.catch((error) => Observable.of({ type: SOME_ERROR, payload: error }))
);
을
또는 switchMap
연산자를 사용할 수도 있습니다.이 연산자는 새 값을받을 때 구독을 취소합니다. 그러나 내 이해는 ngrx
작업이 동 기적으로 전달되므로 각 작업에 대해 HTTP 요청이 이루어질 가능성이 있으며 구현이 취소를 관리하는 방법을 확신하지 못합니다. 응답이 단순히 무시되는 것일 수 있습니다.
이 제안을 주셔서 감사합니다. 그러나 언급해야 할 것은 마지막 전화가 필요한 것입니다. 요청을 탈퇴하여 요청을 취소 할 수 있습니까? – maddockst
고마워요. rxjs 운영자를 살펴볼 필요가 있다고 생각합니다. – maddockst
답변을 업데이트했습니다. – cartant