React Native Await Async не возвращает значение до предупреждения пользователя и настройки состояния - PullRequest
0 голосов
/ 01 октября 2019

Я использую Axios, чтобы совершать HTTPS-вызовы в Twitter API и возвращать токены и твиты:

TwitterScreen.js:

export default class TwitterLogin extends React.Component {
  async componentDidMount(){
      await init("<CUSTOMER KEY>", "<CUSTOMER SECRET KEY>");
      this.twitter =  await getToken();
      alert(this.twitter);
  }
  render() {
      return(
      <View style= {styles.container}>
          <Button
          title="Twitter Login Button" onPress={this.twitter)}
          />
      </View>
     )
  }
}

AxiosUtility.js:

export function init(cuskey, seckey){
    axios.defaults.baseURL = 'https://api.twitter.com';
    //TODO: RFC 1738 this. 
    axios.defaults.headers.common['Authorization'] = 'Basic ' + btoa(cuskey + ':' + seckey);
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
    axios.defaults.headers.post['Accept-Encoding'] = 'gzip';
}

export function getToken(){
    axios.post('/oauth2/token', 'grant_type=client_credentials', {
        'User-Agent' : 'whereabouts dev',
        Accept: '*/*',
    })
    .then((response) => {
        console.log(response.data);
        return (response.data);
    })
    .catch((error) =>{
        console.log(error)
    }
    )
} 

При запуске console.log (response.data) возвращается успешное сообщение. Но он запускается после того, как предупреждающее сообщение отправлено приложению, а это означает, что в сообщении указано «Не определено». Я следовал за документацией безрезультатно.

Я также получаю предупреждение «ожидание не влияет на тип этого выражения». Как правильно использовать await и async, чтобы предупреждение вызывалось после вызова twitter?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

getToken должен вернуть обещание, которое я думаю.

export function getToken(){
//do not return void but promise with return
   return axios.post('/oauth2/token', 'grant_type=client_credentials', {
        'User-Agent' : 'whereabouts dev',
        Accept: '*/*',
    }).then((response) => {
        console.log(response.data);
        return (response.data);
    })
    .catch((error) =>{
        console.log(error)
    }
    )
}
0 голосов
/ 01 октября 2019

Я заметил это недавно. await не работает на componentDidMount (). предложение: сделайте свое ожидание внутри какой-то другой функции, и это должно работать.

...