2015-10-20 4 views
2

, если у меня есть действие асинхронного с апи вызовом, который может быть либо действием возвращает функцию:Как отменить действие Redux Async? (Несколько шагов назад в состоянии)

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 отправляется, который по существу означает два шага обратно в состояние (успех/провал => запросу) ж/вызов api для отмены аш-ай.
Например, после удаления элемента todo (который является асинхронным действием) всплывающая закутка отображается с опцией undo, после щелчка по ней удаленный элемент todo будет добавлен обратно в интерфейс пользователя вместе с вызовом api, чтобы добавить его Вернуться к db.

Я пробовал redux-undo, но я чувствую, что он не предназначен для решения таких проблем.
Или я должен забыть о 'undo' и просто отправить совершенно новый addTodo действие, когда пользователь нажимает кнопку «Отменить»?

Заранее спасибо :-)

ответ