如何在redux行动中实现承诺

如何在redux动作中首先进行api调用,然后调度GET_TODO?

// first the api call has to be made, export function getTodos() { return { type: 'GET_TODOS', promise: request.get(API_URL) } } 

那么它需要parsing响应

 // using https://github.com/Leonidas-from-XIV/node-xml2js parseString(res, function (err, result) { // data gets parsed here }); 

然后它必须发起事件。 我试图如下,但它是抛出错误

 const request = axios.get(url).then(res=>{ parseString(res, function (err, result) { if(result){ dispatch({ type: GET_TODOS, data:result }) } if(err) throw err }); }).catch(err=>console.error(error)) }; 

我得到以下错误

错误:操作必须是普通对象。 使用自定义中间件进行asynchronous操作。

使用thunk中间件 。 以下是您的操作如何:

 export const GET_TODOS = 'GET_TODOS' export const GET_TODOS_SUCCESS = 'GET_TODOS_SUCCESS' export const GET_TODOS_FAILURE = 'GET_TODOS_FAILURE' export function getTodos() { return dispatch => { dispatch({ type: GET_TODOS }) fetch(url) // or whatever way you're making API call .then(res => { parseString(res, (err, result) => { if (err) { throw err } dispatch({ type: GET_TODOS_SUCCESS, payload: result }) }) }) .catch(err => { dispatch({ type: GET_TODOS_FAILURE, payload: err }) }) } }