2017-03-01 112 views
0

我的问题与redux有关,更具体地说是如何处理reducer功能中的错误/故障。我参考了ngrx示例应用程序(https://github.com/ngrx/example-app)以及它处理错误/失败的方式。处理ngrx/redux减速器功能中的错误/故障

这里是减速功能我指的是:

export function reducer(state = initialState, action: collection.Actions): State { 
    switch (action.type) { 
    case collection.ActionTypes.LOAD: { 
     return Object.assign({}, state, { 
     loading: true 
     }); 
    } 

    case collection.ActionTypes.LOAD_SUCCESS: { 
     const books = action.payload; 

     return { 
     loaded: true, 
     loading: false, 
     ids: books.map(book => book.id) 
     }; 
    } 

    case collection.ActionTypes.ADD_BOOK_SUCCESS: 
    case collection.ActionTypes.REMOVE_BOOK_FAIL: { 
     const book = action.payload; 

     if (state.ids.indexOf(book.id) > -1) { 
     return state; 
     } 

     return Object.assign({}, state, { 
     ids: [ ...state.ids, book.id ] 
     }); 
    } 

    case collection.ActionTypes.REMOVE_BOOK_SUCCESS: 
    case collection.ActionTypes.ADD_BOOK_FAIL: { 
     const book = action.payload; 

     return Object.assign({}, state, { 
     ids: state.ids.filter(id => id !== book.id) 
     }); 
    } 

    default: { 
     return state; 
    } 
    } 
} 

能有人请解释的必要性,与这两个动作处理从减速功能中:

  • REMOVE_BOOK_FAIL
  • ADD_BOOK_FAIL

例如,为什么要从该州删除该书(在ADD_BOOK_FAIL行动的情况下)?

如果添加预订操作失败,则该书不在商店中。是吗?

+1

我不确定,但可能是因为api调用。当用户添加书籍时,书籍将在本地添加到商店中,而书籍则会发送到服务器,并且当服务器无法将其保存到数据库(ADD_BOOK_FAIL)时,我们需要将其从商店中删除。 – disstruct

回答

1

也许这是命名使它成为一个红色的鲱鱼,我的猜测是,ADD_BOOK_FAIL可以在其他地方用作另一个用例作为回退机制。

我同意你描述它的方式,这没有意义,开发者是这样做的。