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将错误视为一流的概念。
答案 0 :(得分:0)
将错误传递给动作创建者时,应该通过action.payload
访问错误对象,而action.error
只是一个布尔型标志,表明有效载荷是错误的。
您还可以继承默认错误以存储其他数据:
class MyError extends Error {
constructor(message, payload) {
super(message);
this.payload = payload
}
}