2016-07-27 53 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丹阿布拉莫夫。