Fetch将本机获取数据从函数

时间:2017-04-23 05:21:25

标签: javascript database react-native 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); 我是新的反应,我不知道它是否可能。在我的上下文中,我不能使用状态将其保存在函数中。有任何想法吗? 谢谢

3 个答案:

答案 0 :(得分: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);

通过这种方式,您使用的是异步操作链接同步操作。

答案 1 :(得分:0)

如果预期响应为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))
}

答案 2 :(得分:0)

我遇到了类似的问题..使用_bodyText属性

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