React Native fetch .then 不执行代码,具体取决于内容

Posted

技术标签:

【中文标题】React Native fetch .then 不执行代码,具体取决于内容【英文标题】:React Native fetch .then not executing code, depending on contents 【发布时间】:2018-09-02 00:11:23 【问题描述】:

在 React 本机应用程序中,我有以下 fetch 调用:

fetch("https://facebook.github.io/react-native/movies.json")
    .then(response => response.json())
    .then((responseJson) => 
        console.log('HI THERE')
        //console.error(responseJson);
    );

保持原样,当执行 fetch 调用时,.then 似乎不会执行('HI THERE' 不会被打印)。但是,如果我取消注释包含console.error(responseJson); 的行,那么整个.then 都会被执行。

一个类似的问题是here,但我不完全确定那里发生的问题是否正是我遇到的问题。此外,答案与 fetch 调用是异步的这一事实有关,我们不能期望它们立即执行;我遇到的问题是 fetch 调用根本不执行 .then (我已经等了几分钟几次),直到取消注释一行并且重新加载应用程序并重新执行 fetch 调用。

为什么会发生这种情况 - 我该如何解决它以使其按预期执行?是否是 React Native 错误 - 可能与 this 相关?

【问题讨论】:

【参考方案1】:

我已经用零食试过了,对我来说效果很好 https://snack.expo.io/@troublediehard/fetch-test-app

但无论如何,如果 then 中没有出现某些内容,它可能会失败,您可以在 catch 中找到详细信息。尝试像这样检查它

fetch("https://facebook.github.io/react-native/movies.json")
.then(response => response.json())
.then((responseJson) => 
    console.log('HI THERE')
    // console.error(responseJson);
)
.catch(error => 
  console.log(error);
);

【讨论】:

【参考方案2】:

显然,问题在于我用来运行应用会话的方法。我使用的是sudo npm start,但我改用sudo exp start 来修复它。我不完全确定确切的问题是什么(但我最好的猜测是npm start 中的某些内容会导致控制台日志一直隐藏在缓冲区中,直到记录错误为止)。

【讨论】:

这个链接可能也适用于一些有类似问题的人,虽然我自己还没有尝试过:***.com/questions/40030709/…

以上是关于React Native fetch .then 不执行代码,具体取决于内容的主要内容,如果未能解决你的问题,请参考以下文章

react-native fetch 返回状态码 + json

React Native,Fetch和Dispatch:如何在mapDispatchToProps()中访问responseData?

如何使用fetch(GET Call)设置超时react-native api调用?

React Native使用代理获取本地服务器

Fetch API 从响应中获取原始值

封装fetch的使用(包含超时处理)