2017-02-16 67 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

正確!做得好 :) –