将结果从获取发送到程序的另一部分

时间:2016-05-10 14:02:36

标签: javascript react-native fetch

我正在使用React Native创建一个应用程序,并且遇到了一些主要问题,从我的服务器获取数据并在我的程序中使用它。

我的架构与React Native在其文档中提供的示例略有不同,但我尝试了一些不同的方法。令牌是正确的,我显然在某种意义上正确地调用了该方法,但它并没有将数据返回到我程序的另一端。

在Methods.js

exports.loginUser = function(TOKEN) {
      fetch(baseUrl + 'login' , {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        accessToken: TOKEN,
      },)
    })
    .then((response) => response.text())
    .then((responseText) => {

        console.log(typeof responseText);
        return responseText
    })
    .catch((error) => {
      console.warn(error);
    });
  };

它将数据类型记录为字符串,并在我按原样调用时正确打印出来。但是,我的应用程序无法以任何方式检索数据,它只是返回未定义。

在Home.js

var Method = require('../Services/Methods');
.
.
.
var ComponentTwo = React.createClass({

  getInitialState: function() {
    return {
      text: 'Loading...',      
    }
  },
  componentDidMount: function() {
    {
      this.setState({
        text: Method.loginUser(AccessToken)
      })
    }
  },

  render: function() {

    console.log(Method.loginUser(AccessToken));
    console.log(this.state.text);

我现在处于试用和错误模式,但两个日志都返回undefined,除了我登录的Methods.js,所以我认为只是点击return responseText就会出现问题,但我不知道我知道任何其他方式,因为它们在两个单独的文件中。所以我认为这个问题在Method.JS中,因为调用它会以我尝试的各种方式失败。

1 个答案:

答案 0 :(得分:1)

我认为您必须从loginUser函数返回一个承诺,例如:

exports.loginUser = function(TOKEN) {
  return new Promise((resolve, reject) => {
      fetch(baseUrl + 'login' , {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        accessToken: TOKEN,
      },)
    })
    .then((response) => response.text())
    .then((responseText) => {
        console.log(typeof responseText);
        resolve(responseText);
    })
    .catch((error) => {
        reject(error);
    });
  });
};

然后像这样调用你的函数:

Method.loginUser(AccessToken)
.then((res) => console.log(res))
.catch((error) => console.log(error))
.done();

我尚未确认上述代码是否有效,只是为了给您一个想法。