React Native中的Fetch / Axios停止且没有错误

时间:2018-04-19 21:09:33

标签: react-native redux react-redux redux-thunk

我的本​​地包装盒上有一个小应用程序。设置是React Native,Redux Thunk和Redux。使用Thunk,我会从后端服务器加载数据。

这一切都很好,除了一个请求在加载数据时停止。代码如下:

export function readData() {
    return function (dispatch) {
        console.log("service called");

        return axios.get(
              BASE_URL + '/my-data',{ 
              timeout: 120000,
              transformResponse: function(data) {
                console.log("transform");
                return JsonUtils.readJsonFromResponse(data);
              }
            }
          ).then(response => {
            console.log("output");
            dispatch(showData(response.data.result));
          }).catch(error => {
          console.log("error", error);
          throw error;
      });

    }
}

上面的代码现在显示了axios,但是Fetch也出现了同样的问题。当我将代码更改为另一个URL时,它可以正常工作。结果是有效的。我看到的唯一区别是我的其他网址提供了大约5kb的数据,而目前有问题的网址提供了大约100kb的数据。

以上的输出是:

service called

当使用其他URL时,将写入所有控制台输出。

在服务器端,我可以看到输出被写入并传递。看起来请求已成功发送,响应已返回,但React没有接收它。

有趣的是,有时(非常罕见)这与有问题的网址一样有效。

我同时禁用了远程调试。我在Mac上工作并使用iOS模拟器,但我也验证了我的iPhone 7 +上发生的问题。

编辑:我也玩过超时(没有超时= 0,非常高的超时)等等。这没有用。我可以看到本地(!)服务器响应非常快。在我的Postman测试中,它的响应时间大约为100毫秒。

EDIT2:我永远不会遇到catch块或看到任何其他错误。

EDIT3:这是有问题的服务的结果。请注意,它是有效的JSON前缀,后缀为/ * * /(历史原因)。就像现在一样,它可以被许多其他客户消费。

/* {
    "result": [{
        "tasks": [{
            "id": xxxx,
            "active": true,
            "complete": false,
            "description": "",
            "estimated": null,
            "lastused_at_ts": 1468263101,
            "completed_at_ts": null,
            "created_at_ts": 1322611200,
            "name": "xxxxxx",
            "projectId": xxxxx,
            "projectName": null,
            "taskCategoryId": 1,
            "taskCategoryName": "xxxx.default",
            "uuid": "xxxxxx-8182-47c2-9cd6-8eff216ee714",
            "taskCategory": {
                "id": null,
                "name": "xxxx.default"
            },
            "createdAt": "16.01.1970 07:23",
            "lastUsed": 1468263101,
            "completedAt": "20.04.2018 09:47"
        },
                 ....],
        "times": null,
        "name": "xxxxxx",
        "id": 32,
        "comment": "xxxxx",
        "uuid": "xxxxx-3a00-4e1d-82a1-e72318d5df3f",
        "createdAt": "16.01.1970",
        "active": false
    }, 
               ...
} */

我添加了......,还有更多的数据行。输出通常不是很漂亮,只是一行。

可能导致此问题的原因是什么?

1 个答案:

答案 0 :(得分:2)

您目前有timeout 6000。可能发生的事情是更大的请求(100kb)需要更长的时间来解决。尝试提高超时时间。

此外,您应该添加一个.catch()子句链,因为您可以console.error()这样的事情来帮助调试它们。