React-native async fetch返回null

时间:2017-02-16 23:13:17

标签: javascript reactjs react-native fetch

我正在尝试将获取函数放入一个单独的文件中,因此我可以轻松地组织这些API获取。但是,当我尝试获取并返回数据时,它会给我null或意外的json对象。这是我的src的一部分:

app = Flask(__name__)
api = Api(app)

@app.after_request
def after_request(response):
  response.headers.add('Access-Control-Allow-Origin', '*')
  response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
  response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
  return response


if __name__ == '__main__':
    app.run()

这是另一个档案。

//api.js
export async function LoginAPI(username, password) {
   const url = baseURL + "/login/";
   var params = {username: username, password: md5.hex_md5(password)};

   let response = await fetch(url, {
      method: 'POST',
      headers: {'Accept': 'application/json','Content-Type': 'application/x-www-form-urlencoded'},
      body: JSON.stringify(params)
   });
   return await fetch(url, {
      method: 'POST',
      headers: header,
      body: JSON.stringify(params)
   })
   .then((res) => res.text())
   .then((text) => text.length ? JSON.parse(text) : {})
    .catch((error) => {
        throw error;
    });
};

fetch正在运行,它正在与服务器通信。但是,控制台日志会在第一时间返回给我

//index.js
var Login = React.createClass({
  onPress_login: function() {
  var value = this.refs.form.getValue();
  if (value) {
     result = LoginAPI(value.username, value.password);
     console.log(result);
  } else {
     this.AlertDialog.openDialog();
  }
},
render() {
   return (
 (...)
 <Button onPress={this.onPress_login}>
     <Text>Login</Text>
 </Button>

我假设控制台中的 Promise _45: 0_54: null _65: null _81: 1 __proto__: Object 日志首先不是await结果(来自服务器的实际响应,而是获取响应的对象)。我试图在线搜索方法,但我找不到任何帖子/博客/文章说如何作为函数调用获取。

有没有办法像swift,result请?

1 个答案:

答案 0 :(得分:3)

问题是你正在制作异步功能而不是等待响应,你会看到那种控制台日志。

试试这个:

result = await LoginAPI(value.username, value.password);

如果这是你的问题,请告诉我。