【问题标题】:Set the value of a variable outside of a fetch call in react native?在本机反应中设置获取调用之外的变量值?
【发布时间】:2016-09-07 22:15:23
【问题描述】:

我正在用 react native 编写一个应用程序,我想查询我拥有的 API。 API 非常简单,只是在网页上吐出一些文本。

我一直在用这个:

var value = '';

fetch("http:myapi.com/")
.then((response) => response)
.then((responseData) => {
  value = responseData._bodyText;
  console.log(responseData._bodyText); //prints what I want
})
.done();

console.log(value); //prints an empty string

我想将 var "value" 的值设置为响应的文本。执行 console.log 表明 responseData._bodyText 确实有我想要的信息,但是当我尝试将 var 值设置为 responseData._bodyText 时,未设置值并且变量保持为空。

我应该如何解决这个问题?

【问题讨论】:

  • 你在哪里使用“value”的值?
  • 您能否使用上述语句中引用的 console.log 行更新示例以避免假设...
  • 好的,我添加了它们

标签: reactjs react-native fetch react-native-fbsdk


【解决方案1】:

response 是一个响应对象,而不是一个承诺。你可能想要response.json()response.text()

var value = '';

fetch("http:myapi.com/")
.then((response) => { return response.text() }) // change to return response.text()
.then((text) => {
  value = text;
})
.done();

【讨论】:

  • 在使用 response.text() 解析第一个 promise 后,链式的第二个 promise 如何才能将 responseData 作为对象?
  • 感谢您的更新。但是为什么要将它链接到第二个承诺?我们可以将文本分配给第一个承诺本身的“价值”.then((response) => value = response.text())
  • @GaleelBhasha 因为response.text() 返回一个解析为文本的承诺。见developer.mozilla.org/en-US/docs/Web/API/Body/text。您的建议会将value 设置为承诺而不是文本
  • 这仍然没有将外部值设置为 text 的值:/
  • @higgs 也许你的网络服务失败了
【解决方案2】:

可能是异步问题。如果您在 fetch Promise 链末尾的回调中注销responseData._bodyText,那么它可能是正确的,但是如果您记录分配的value 变量并看到空字符串,我会假设您正在登录在 fetch 承诺被解决之前。

【讨论】:

    【解决方案3】:
    var value = '';
    
    fetch("http:myapi.com/")
    .then((response) => response.text())
    .then((text) => value = text)
    .done();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多