使用して問題を解決することができるはずthrottle
operator - その観察発するまで、光源によって放出された任意の値は無視/絞られる、観察を返し、関数をとります。
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ベースの効果で、このようにthrottle
を使用する場合は、保留中の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