javascript - 在哪里放置不映射到状态的函数?

标签 javascript ajax reactjs redux

这里是 React/Redux n00b :) - 使用一个蹩脚的 API,它不能正确返回错误代码(即使端点关闭也返回 200),因此搞乱了我的 Ajax 调用。 API 所有者无法尽快纠正此问题,因此我现在必须解决这个问题。

我目前正在使用类似这样的内容检查每个成功(使用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 中?

最佳答案

您可以根据 promise 是否得到解决来分派(dispatch)不同的操作。最简单的方法是这样的:

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怎么做这种事...

关于javascript - 在哪里放置不映射到状态的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34597987/

相关文章:

javascript - 在视频标签之前加载图片标签

javascript - 原型(prototype)。 Ajax 请求参数作为嵌套的 json

java - 使用ajax调用servlet

javascript - IIS 7 Cors Ajax Soap 请求

javascript - react native : Getting data from one class to another

php - 使用 JavaScript 动态添加字段会使字段消失

javascript - 将设置传递给 AngularJS 应用程序

javascript - Google MarkerClusterer 不显示标记

javascript - 使用 React 和 setTimeout 更新 <canvas/>

javascript - 使用js在数组中打印json值