首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在redux操作中链接承诺

如何在redux操作中链接承诺
EN

Stack Overflow用户
提问于 2016-09-30 11:30:01
回答 1查看 804关注 0票数 1

如何在redux操作中先进行api调用,然后再调度GET_TODOs?

代码语言:javascript
运行
复制
// first the api call has to be made,

    export function getTodos() {
    return {
          type: 'GET_TODOS',
          promise: request.get(API_URL)
      }
    }

然后,它需要解析响应

代码语言:javascript
运行
复制
// using https://github.com/Leonidas-from-XIV/node-xml2js
parseString(res, function (err, result) {
          // data gets parsed here
});

然后它必须发送raise事件。我尝试如下所示,但它抛出错误

代码语言:javascript
运行
复制
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))
  };

我得到了以下错误

错误:操作必须是纯对象。对异步操作使用自定义中间件。

EN

回答 1

Stack Overflow用户

发布于 2016-09-30 16:31:08

使用thunk middleware。下面是您的操作的外观:

代码语言:javascript
运行
复制
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
              })
        })
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39783210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档