花了太多时间才做出承诺's则起作用

Taking too much time to call promise's then function

本文关键字:起作用 承诺 太多 时间      更新时间:2024-03-05

我正在使用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键)打开您的网络工具包开发程序,然后进入网络选项卡。

您可以查看查询所花费的时间。如果需要很长时间,则可能是您的网络连接或服务器设置了延迟响应。

如果不是,那就是客户端。