2017-03-02 46 views
0

在我的商店中有一个包含未决网络请求的队列。 当动作ATTEMPT_FLUSH已启动时,我想按顺序发送请求。 但是,如果其中一个失败并发出ATTEMPT_FLUSH_CANCELLED,则不应尝试下一个(当然,在我再次尝试下一个ATTEMPT_FLUSH时)。当一个失败时取消ajax调用顺序

这里是我到目前为止

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

向上移动的实际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()))) 
    );