我試圖創建一個將採取動作的史詩,然後調度兩個不同的動作,第二個動作延遲兩秒。一堆的嘗試後,這是最好的,我可以這樣做:使用Redux-Observable調度延遲的第二個動作,同時保留第一個動作
const succeedEpic = action$ =>
action$.filter(action => action.type === 'FETCH_WILL_SUCCEED')
.mapTo({ type: 'FETCH_REQUEST' })
.merge(Observable.of({ type: 'FETCH_SUCCESS' }).delay(2000))
不幸的是,它似乎是:
Observable.of({ type: 'FETCH_SUCCESS' }).delay(2000)
立即跑在我的應用程序被加載(而不是在事件歸結父流)。我注意到這一點,因爲我的應用程序加載完成後兩秒鐘,減速器會收到FETCH_SUCCESS
操作。我甚至附加一個console.log
證實這一點:
const succeedEpic = action$ =>
action$.filter(action => action.type === 'FETCH_WILL_SUCCEED')
.mapTo({ type: 'FETCH_REQUEST' })
.merge(Observable.of({ type: 'FETCH_SUCCESS' })
.do(() => console.log('this has begun'))
.delay(2000)
)
「這已經開始」被記錄到控制檯應用程序被啓動的時刻。
我懷疑這與Redux-Observable如何自動爲您訂閱有關。
期望的行爲是,我將:
- 點擊一個按鈕,調度
FETCH_WILL_SUCCEED
事件。 - 立即分派一個
FETCH_REQUEST
事件。 - 之後兩秒鐘,調度一個
FETCH_SUCCESS
事件。
這是行不通的,因爲我的下一步是創建一個「取指會失敗」的史詩,它也分派FETCH_REQUEST,但後續操作是FETCH_FAIL而不是FETCH_SUCCESS。 – adrianmc