2017-02-16 28 views
1

我想把抓取功能放到一个单独的文件中,所以我可以轻松地组织这些API抓取。但是,当我尝试获取并返回数据时,它会给我null或一个意外的json对象。这里是我的部分src:反应本地异步获取返回空

//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; 
    }); 
}; 

这是另一个文件。

//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 

我假设result日志在首位控制台不是的await结果(从服务器的实际响应,但对象取响应)。我试图在网上搜索方法,但我找不到任何文章/博客/文章说如何做一个函数调用获取。

请问有什么办法可以像swift一样,LoginAPI(username, password, callback: {...})好吗?

回答

2

问题是你正在做一个异步函数,而不是等待响应,你会看到那种控制台日志。

试试这个:

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

让我知道,如果这是你的问题。

+0

它打破了......它说导入错误的东西。 – DrKNa

+0

哦,很好的提示!它以这种方式工作。 (){ 'onPress_login:async function if(value){0}结果=等待LoginAPI(value.username,value.password);' – DrKNa

+1

正确!做得好 :) –