在哪里放置不能映射到州的功能?

时间:2016-01-04 19:00:45

标签: javascript ajax reactjs redux

React / Redux n00b在这里:) - 使用一个没有正确返回错误代码的糟糕API(即使在结束点关闭时返回200),因此搞乱了我的Ajax调用。 API的所有者将无法尽快纠正此问题,因此我现在必须解决这个问题。

我目前正在使用类似的内容检查每个success(使用lodash):

success: function(data) {
    // check if error is REALLY an error
    if (_.isUndefined(data.error) || _.isNull(data.error)) {
        if (data.id) data.sessionId = data.id;
            if (data.alias) data.alias = data.alias;
              resolve(data || {});
    } else {
        reject(data); // this is an error
    }
 }

我想将它移到它自己的函数中,以便我可以将它用于执行Ajax调用的任何操作,但我不知道在哪里包含它。

这种类型的函数是否应该映射到状态(因此,将其视为一个动作并构建一个reducer),或者这应该是Redux之外的泛型并抛出main.js例如?

1 个答案:

答案 0 :(得分:2)

您可以根据承诺是否已解决来调度不同的操作。最简单的方法是:

function onSuccess(data) {
  return {
    type: "FETCH_THING_SUCCESS",
    thing: data
  };
}

function onError(error) {
  return {
    type: "FETCH_THING_ERROR",
    error: error
  };
}

function fetchThing(dispatch, id) {
  // the ajax call that returns the promise
  fetcher(id)
    .then(function(data){
      dispatch(onSuccess(data));
    })
    .catch(function(error) {
      dispatch(onError(error));
    });
}

还有一些documentation如何做这种事......