2016-07-27 59 views
1

考慮以下情況:如何取消掛起的異步操作反應,和/終極版

當用戶瀏覽到頁面,兩個異步終極版動作被派往取兩組相關數據並行的。如果這些提取中的任何一個失敗,它將被組件檢測到,它將在下一個循環中呈現錯誤組件,其在安裝時分派動作clearState

但是,其他行動仍然是要解決/拒絕,並將破壞清潔狀態。目標是在調用動作創建器clearState時中斷這個(最好是很多其他的)未決異步動作。 AFAIK,等待承諾應該以任何方式解決/迴應,無論如何。

我想到的第一件事是向每個reducer引入INTERRUPTED標誌,但是我無法圍繞如何使用它來使下面的SUCCESS/ERROR操作不影響/返回默認狀態。

如何做到這一點,保持複雜性至少?

+1

你應該看看[redux-saga](https://github.com/yelouafi/redux-saga)。您可以通過取消任務來完成此操作。 – Pcriulan

+0

Redux-saga非常棒,它甚至有一個'''race'''功能來完成你正在做的事情 – horyd

回答

0

我有一個類似的問題,我正在使用jQuery製作ajax請求和redux-thunk中間件。

解決方法是讓您的動作創建者返回承諾,這個承諾將由調度功能返回,然後您將能夠中止它。

在我的行動的創建者我有這樣的事情:

function doSomething() { 
    return (dispatch) => { 
    return $.ajax(...).done(...).fail(...); 
    } 
} 

然後在我的部分,我有:

componentDidMount(){ 
    this.myPromise = this.props.dispatch(doSomething()); 
    } 

    somefnct() { 
    this.myPromise.abort(); 
    } 

也有看看這個comment丹阿布拉莫夫。