我正在使用fetch API调用我的React Native应用程序中的查询服务器。但是,我的应用程序在收到服务器的响应后需要50秒才能调用then
函数。我是不是做错了什么,或者Promise运行得很慢?
fetch(url, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded',
},
body: bodyContent
}.then((responseText) => {
console.log(responseText);
responseText.json().then(function(response){
console.log(response);
});
});
responseText
后50秒,response
正在日志中打印
更新:刚才发现responseText.json()
承诺只有在我再次点击屏幕后才执行。这个问题很奇怪。
最后,我找到了这个问题的解决方案。这是因为Chrome Debugging
。如果我停止chrome调试,它工作正常。如果Chrome调试器正在运行,我必须在屏幕上点击返回值。因此,如果您正在运行chrome调试器,请忽略此延迟。
由于我们将其缩小到花费太多时间的json()调用,因此这似乎是一个已报告的问题(https://github.com/facebook/react-native/issues/6418)这种情况并不经常发生,到目前为止也无法重现。这可能与json对象的结构或大小有关。
就我个人而言,我使用你在我的react原生应用程序中大量使用的代码结构,并且没有性能损失。然而,我的典型回复是非常小和简单的(例如,一个包含大约20个键的10个对象的列表,没有嵌套等)
您可以尝试我链接到的问题报告中的建议,并使用responseText.text()来比较性能。
承诺比回调慢一点。但不是50秒!我想你的网络连接有问题。
我也遇到过同样的问题,responseText会在几毫秒内立即返回,但当它使用.json()转换为json时,需要几秒钟的时间,有趣的是,如果我在.json(
尝试从浏览器(通常是F12键)打开您的网络工具包开发程序,然后进入网络选项卡。
您可以查看查询所花费的时间。如果需要很长时间,则可能是您的网络连接或服务器设置了延迟响应。
如果不是,那就是客户端。