我的本地包装盒上有一个小应用程序。设置是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
},
...
} */
我添加了......,还有更多的数据行。输出通常不是很漂亮,只是一行。
可能导致此问题的原因是什么?
答案 0 :(得分:2)
您目前有timeout
6000
。可能发生的事情是更大的请求(100kb)需要更长的时间来解决。尝试提高超时时间。
此外,您应该添加一个.catch()
子句链,因为您可以console.error()
这样的事情来帮助调试它们。