将其他信息传递给由“ redux-actions”

时间:2018-10-09 18:03:17

标签: javascript redux redux-actions

redux-actions “自动”处理错误:

  

如果有效负载是Error对象的实例,则redux-actions将   自动将action.error设置为true

错误将是此操作的有效载荷。

但是,如果有效载荷是由错误引起的,我该如何从中提取信息 在我的化简器中将相关项目标记为“错误”的操作( 从错误消息中提取信息)?

import { createAction } from 'redux-actions'
import * as api from '../api'

export const fetchSomethingRequest = createAction('FETCH_SOMETHING_REQUEST')
export const fetchSomethingResponse = createAction('FETCH_SOMETHING_RESPONSE')

export const fetchSomething = id => dispatch => {
  dispatch(fetchSomethingRequest({ id }))

  return api
    .fetchSomething(id)
    .then(something => dispatch(fetchSomethingResponse({ id, something })))
    // I would like to add some information to be able afterwards (eg. in a
    // reducer) to mark `id` as on error
    .catch(error => dispatch(fetchSomethingResponse(error)))
    // with regular actions, I would do something like this
    // .catch(error => dispatch(fetchSomethingResponse({ id, error }))) 
}

我想我可以使用该动作的meta信息,但是我认为这里缺少一些东西。

注意: Flux Standard Action将错误视为first class concept

  

助焊剂动作可以视为值的异步序列。它是   对于异步序列处理错误很重要。目前,许多助焊剂   实现不执行此操作,而是定义单独的操作类型,例如   LOAD_SUCCESS和LOAD_FAILURE。这不理想,因为它过载   两个不同的关注点:消除特定类型的行为与   “全局”动作序列,并指示一个动作是否代表一个   错误。 FSA将错误视为一流的概念。

1 个答案:

答案 0 :(得分:0)

将错误传递给动作创建者时,应该通过action.payload访问错误对象,而action.error只是一个布尔型标志,表明有效载荷是错误的。

您还可以继承默认错误以存储其他数据:

class MyError extends Error {
  constructor(message, payload) {
    super(message);
    this.payload = payload
  }
}