前几天,我注意到该应用程序的某些API调用没有被静默执行。我在fetch
请求之前和之后注销了console.log,瞧瞧,获取的等待从未完成。
// in an async js function...
let response;
try {
console.log("START")
response = await fetch(url, { headers, method, body });
console.log("END")
} catch (err) {
console.log(err)
}
会完成吗?
在该应用的日志中,我看到“ START”,但是我等待2-5分钟,它通常会 打印“ END”
是服务器吗?
我怀疑这只是一个慢速的服务器API,但是将日志记录在服务器上,直到“开始”后约2分钟才发送请求-而且我看到它已经正确发送/处理了当它打印出“ END”时
我已将动作电缆连接到Redis,并安装在我的Rails应用中,并通过Heroku上的Puma提供服务。
我可以复制它吗?
要重现它非常困难,但是我可以通常通过在iOS应用模拟器中按command + R
来触发它,它会重新加载应用并启动一些新的API请求,挂。
还有什么?
我已打开与服务器的Websocket连接。不确定是否会造成任何干扰。
我已经尝试在AbortController中使用超时,但是它只等待5秒钟,然后终止请求(但没有新请求成功)
启动后,每个API请求都会挂起。
我的问题
更新:好的,也许是我的服务器...?我尝试将URL更改为其他网站,但请求似乎已完成。**
更新:好的,我认为这是服务器。我尝试了一个curl
请求和一个traceroute
请求,他们发现事情悬而未决...
跟踪路由结果
traceroute to us-east-1-a.route.herokuapp.com (127.0.0.54), 64 hops max, 52 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
(it never ends)
卷曲结果
curl -v https://redacted.herokuapp.com/v3/users/me
* Trying 127.0.0.54...
* TCP_NODELAY set
* Connection failed
* connect to 127.0.0.54 port 443 failed: Operation timed out
* Failed to connect to redacted.herokuapp.com port 443: Operation timed out
* Closing connection 0
curl: (7) Failed to connect to redacted.herokuapp.com port 443: Operation timed out
更新:这越来越奇怪。我关闭了iOS模拟器,并让计算机休息了10分钟。回来了,只是尝试了简单的curl请求,它就起作用了。触发了iOS模拟器的备份,现在我的curl请求超时。
更新:我怀疑这与Heroku上的可操作电缆阻止请求有关。尝试禁用所有websocket,然后再次测试。
更新:要查看它是否特定于应用程序,我创建了一个全新的react native应用程序和一个全新的Rails API。
API步骤
移动应用步骤
componentDidMount
中添加setInterval请求以从Rails API中获取我完全迷失了……