2015-10-20 26 views
2

如果我有API调用一个异步操作,该操作既可以是一个动作返回的函数:如何撤消Redux异步操作? (多个步骤回到状态)

export function asyncAction(itemId) { 
    return (dispatch) => { 
    dispatch(requestStarted()); 

    return sendRequest(itemId).then(
     (result) => dispatch(requestSuccess()), 
     (error) => dispatch(requestFail()) 
    ); 
    }; 
} 

或一个返回一个对象,并使用中间件拦截,并做东东:

export function asyncAction(itemId) { 
    return { 
    type: [ITEM_REQUEST, ITEM_REQUEST_SUCCESS, ITEM_REQUEST_FAILURE], 
    promise: sendRequest(itemId), 
    userId 
    }; 
} 

// same middleware found in https://github.com/rackt/redux/issues/99 
export default function promiseMiddleware() { 
    return (next) => (action) => { 
    const { promise, ...rest } = action; 
    if (!promise) { 
     return next(action); 
    } 

    next({ ...rest, readyState: 'request'); 
    return promise.then(
     (result) => next({ ...rest, result, readyState: 'success' }), 
     (error) => next({ ...rest, error, readyState: 'failure' }) 
    ); 
    }; 
} 

现在我的问题是:我如何回滚给国家asyncAction被派遣之前,这基本上意味着两步找回状态(成功/失败=>请求)W/api调用撤消l快速通话。
例如,在删除待办事项(这是一个异步操作)后,弹出式快餐栏将显示一个撤消选项,点击后,删除的待办事项将添加回UI并添加一个api调用回到db。

我试过redux-undo但我觉得它并不打算解决这样的问题。
或者我应该忘记'撤销',只是发送一个全新的addTodo用户单击撤消选项时的操作?

在此先感谢:-)

回答