2017-02-16 5 views
1

Я пытаюсь поместить функции fetch в отдельный файл, поэтому я могу легко организовать эти API-выборки. Однако, когда я пытаюсь получить и вернуть данные, это дает мне пустой или неожиданный json-объект. Вот часть моего src:React-native async fetch возвращает null

//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 (фактический ответ от сервера, но принести объект ответ). Я попытался найти методы в Интернете, но я не могу найти сообщение/блог/статью о том, как делать выборку как вызов функции.

Есть ли способ, как быстро, LoginAPI(username, password, callback: {...}) пожалуйста?

ответ

2

Проблема в том, что вы выполняете функцию async и не ожидаете ответа, вы видите такой вид журнала консоли.

Попробуйте это:

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

Позвольте мне знать, если это ваша проблема.

+0

Это ломается ... это говорит о ошибке импорта. – DrKNa

+0

oh приятный намек! Он работает таким образом. 'onPress_login: async function() { var value = this.refs.form.getValue(); if (value) { result = wait LoginAPI (значение. Имя_пользователя, значение.password); ' – DrKNa

+1

Ровно! Отличная работа :) –

 Смежные вопросы

  • Нет связанных вопросов^_^