1

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

如果 payload 是 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将错误视为一流的概念

Flux 动作可以被认为是一个异步的值序列。异步序列处理错误很重要。目前,许多 Flux 实现不这样做,而是定义单独的操作类型,如 LOAD_SUCCESS 和 LOAD_FAILURE。这不太理想,因为它重载了两个独立的问题:从“全局”动作序列中消除某种类型的动作的歧义,以及指示动作是否代表错误。FSA 将错误视为一流的概念。

4

1 回答 1

0

当您将错误传递给操作创建者时,错误对象应该可以通过 访问action.payload,而action.error只是一个布尔标志,表示有效负载是错误的。

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

class MyError extends Error {
  constructor(message, payload) {
    super(message);
    this.payload = payload
  }
}
于 2018-10-09T18:29:08.157 回答