Обработка ошибок / сбоев в функциях редуктора ngrx / redux

Мой вопрос относится к редукции и, в частности, к тому, как обрабатывать ошибки / сбои из функций редуктора. Я имею в виду пример приложения ngrx (https://github.com/ngrx/example-app) и способ обработки ошибок / сбоев.

Вот функция редуктора, о которой я говорю:

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)?

Если действие добавления книги завершилось неудачно, значит, книги нет в магазине. Это?


person balteo    schedule 01.03.2017    source источник
comment
Я не уверен, но это могло быть из-за вызовов API. Когда пользователь добавляет книгу, книга добавляется локально в магазин, затем книга отправляется на сервер, и когда серверу не удается сохранить ее в базе данных (ADD_BOOK_FAIL), нам нужно удалить ее из магазина.   -  person disstruct    schedule 02.03.2017


Ответы (1)


Может быть, это используемое именование, которое делает его отвлекающим маневром, я предполагаю, что ADD_BOOK_FAIL может использоваться где-то еще для другого варианта использования в качестве резервного механизма.

Я согласен, как вы это описываете, не имеет смысла, что разработчик сделал это по этой причине.

person Zinc    schedule 01.03.2017