花太多时间调用 promise 的 then 函数

Taking too much time to call promise's then function

我正在使用 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);
        });
    });

responseresponseText

后 50 秒在日志中打印

更新:刚刚发现 responseText.json() 承诺只有在我再次点击屏幕后才会执行。这个问题很奇怪。

promise 比 callback 慢一点。但不是 50 秒!我认为您的互联网连接有问题。

尝试从浏览器(通常是 F12 键)打开您的 webtool kit developper,然后进入网络选项卡。

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

如果不是,就是客户端。

由于我们将其缩小到花费太多时间的 json() 调用,因此似乎这是一个报告的问题 (https://github.com/facebook/react-native/issues/6418),但到目前为止并不经常发生不可重现。这可能与您的 json 对象的结构或大小有关。

就我个人而言,我使用您在我的 React 本机应用程序中大量使用的代码结构,并且没有性能损失。但是,我的典型响应非常小且简单(例如,包含 10 个对象的列表,大约有 20 个键,没有嵌套等)

您可以尝试我链接到的问题报告中的建议并使用 responseText.text() 并比较性能。

我遇到了同样的问题,responseText在几毫秒内立即返回,但是当它使用.json()转换为json时,需要几秒钟,有趣的是如果我在 .json() 解析期间单击屏幕,它会立即返回 json 数据

终于,我找到了解决这个问题的方法。就是因为Chrome Debugging。如果我停止 chrome 调试,它工作正常。如果 Chrome 调试器是 运行,我必须点击屏幕以获得 return 值。因此,如果您是 运行 chrome 调试器,请忽略此延迟。