【问题标题】:Fetch react native get data out of the functionFetch react native 从函数中获取数据
【发布时间】:2017-04-23 05:21:25
【问题描述】:

我正在尝试创建一个像经典函数一样返回数据的 fetch 函数。像这样:

function fetchGetData(idUser){
        fetch('url?idU='+idUser)
        .then((response)=>console.log(response))
        .then((responseText)=>{
            if(responseText.result!='true'){
                console.log(responseText)
             return parseInt(responseText) // return the data (a number for me)
            }
            else {
              return 0 ; 
            }
        });
    }

然后我想使用这样的函数: var data = fetchGetData(id); 我是新来的反应,我不知道它是否可能。在我的上下文中,我不能使用状态将其保存在函数中。有任何想法吗? 谢谢

【问题讨论】:

  • 是回复JSON还是纯文本?
  • 你确定服务器的响应是JSON还是纯文本?
  • 响应是纯文本。我试过你的代码,但它对我不起作用:(
  • 你能描述一下“没用”吗?您是否尝试过链接 jsfiddle jsfiddle.net/bvcdyj4k

标签: javascript database react-native fetch


【解决方案1】:

因为您想将请求的响应作为同步函数响应 (var data = fetchGetData(id);) 之类的变量,所以最好在这种情况下使用 async/await。 这是你重写的 fetchGetData:

async function fetchGetData(idUser){
  try {
    let response = await fetch('url?idU='+idUser);
    console.log(response);
    let responseText = await response; // are you sure it's not response.json();?
    if(responseText.result!='true'){
      console.log(responseText);
      return parseInt(responseText) // return the data (a number for me)
    } else {
      return 0 ; 
    }
  } catch(error) {
    console.error(error);
  }
}

现在你可以通过调用函数来分配它的返回值:

var data = await fetchGetData(id);

这样,您正在使用异步操作链接同步操作。

【讨论】:

  • “在这种情况下最好使用 async/await。” 你能定义“更好”吗? responsejavascript 对象还是文本?
  • 更好的是因为如何分配响应(var data = fetchGetData(id);)。
  • 这不是“更好”的定义。这些方法在功能上是等效的Implementing coroutine control flow in JavaScript
  • 感谢您的回复, fetch 调用了一个返回数字的 php 函数。我不知道响应类型是什么,我只想从 fetch 函数中获取变量中的那个数字。我可以通过函数内部的控制台日志看到它,但我不能在外面
  • 注意,responseText不能同时是javascript对象和纯文本。
【解决方案2】:

如果预期响应是JSON,则将.json() 链接到response 以返回javascript 对象,否则使用.text() 以纯文本形式返回响应

function fetchGetData(idUser) {
  return fetch('url?idU=' + idUser) // note `return` fetch from function call
    .then(response => {
      return response.text() // if `response` is `JSON` use `.json()` here
    })
    .then(responseText => {
    //  if (responseText.result != 'true') { // is expected response `JSON` or text?
        console.log(responseText);
        return parseInt(responseText) // return the data (a number for me)
    //  } else {
    //    return 0;
    //  }
    })
    .catch(err => Promise.reject(err))
}

【讨论】:

  • 感谢您的回复,我想在这个函数中返回一个数字,基本上是一个文本。我的 fetch 调用一个返回数字的 php 函数。我只是想得到那个号码。
  • javascript at Answer 应该返回预期结果jsfiddle.net/bvcdyj4k
【解决方案3】:

我也有类似的问题.. 使用_bodyText 属性

function fetchGetData(idUser){
        fetch('url?idU='+idUser)
        .then((response)=>{console.log(response._bodyText)
              return parseInt(response._bodyText)})
        );
    }

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2021-02-28
    • 2021-12-23
    相关资源
    最近更新 更多