当一个失败时取消ajax调用序列

时间:2017-03-02 07:23:28

标签: rxjs rxjs5 redux-observable

在我的商店中有一个包含待处理网络请求的队列。 当动作ATTEMPT_FLUSH被设置时,我想按顺序发送请求。 但是,如果其中一个失败并发出ATTEMPT_FLUSH_CANCELLED,则不应尝试下一个(当然,直到我在下一个ATTEMPT_FLUSH再试一次)。

这是我到目前为止所拥有的

export const attemptFlushEpic = (action$, store) =>
  action$
    .ofType(ATTEMPT_FLUSH)
    .mergeMap(() => Observable.from(store.getState().queue)) // state.queue is an array
    .concatMap(action =>
        Observable.ajax(action.url)
        .map(response => removeFromQueue(action))
        .catch(err => Observable.of(attemptFlushCancelled())));

1 个答案:

答案 0 :(得分:1)

提升实际的ajax调用应该在失败时取消后续的ajax。

export const attemptFlushEpic = (action$, store) =>
  action$
    .ofType(ATTEMPT_FLUSH)
    .mergeMap(() => Observable.from(store.getState().queue)
      .concatMap(action => Observable.ajax(action.url)
        .map(response => removeFromQueue(action)))
      .catch(err => Observable.of(attemptFlushCancelled())))
    );