花费太多时间来致电承诺,然后运作

时间:2016-04-08 12:29:38

标签: javascript react-native fetch-api

我正在使用fetch API在我的React Native Application中调用查询服务器。但是,我的应用程序在收到服务器的响应后需要50秒才能调用then函数。我做错了还是承诺工作很慢?

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()承诺正在执行。这个问题很奇怪。

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

最后,我找到了解决这个问题的方法。这是因为Chrome Debugging。如果我停止chrome调试,它工作正常。如果Chrome调试器正在运行,我必须点击屏幕上的返回值。因此,如果您正在运行chrome调试器,请忽略此延迟。

答案 2 :(得分:1)

承诺比回调慢一点。但不是50秒!我认为你有互联网连接的问题。

答案 3 :(得分:0)

尝试从浏览器(通常是F12键)打开webtool套件开发工具,然后进入网络标签页。

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

如果没有,则是客户端。

答案 4 :(得分:0)

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