Реагировать на туземцев, используя топор ios, не могу получить жетон на предъявителя - PullRequest
0 голосов
/ 01 мая 2020

Я получил запрос API, используя ax ios, поступающий с моего внутреннего сервера. Я хочу сохранить токен-носитель в хранилище устройства или локальном хранилище. Но когда я делаю console.log для токена на предъявителя, он, кажется, не работает, потому что то, что я получаю, является чем-то вроде обещания.

Вот мой метод

import {AsyncStorage, Alert} from 'react-native';
export default function login(email,password,setLoading){

   console.log('Loading...')
   setLoading(true)

    axios.post('http://52.74.70.6/api/auth/login',{
       email: email,
       password: password
   },{
       headers:{
        Accept: 'application/json',
        'Content-Type': 'application/json',
       }
   })
    .then((res)=>{
        setLoading(false)
        AsyncStorage.setItem('bearer_token', res.data.bearer_token);
        console.log(AsyncStorage.getItem('bearer_token'))
        console.log('Loading Finished')
    }).catch((err)=>{
        setLoading(false)
        console.log(err)
        AlertErr()
    })
}

То, что я получил, это

Loading...

Promise {
  "_40": 0,
  "_55": null,
  "_65": 0,
  "_72": null,
}

Loading Finished

Ответы [ 3 ]

1 голос
/ 01 мая 2020

Поскольку это "Asyn c", вы пытались добавить await до него

 await AsyncStorage.setItem("bearer_token", res.data.bearer_token);
 console.log(await AsyncStorage.getItem('bearer_token'))

или просто вернуть обещание в цепочке обещаний


then((res)=>{
        setLoading(false)
        await AsyncStorage.setItem('bearer_token', res.data.bearer_token);
        return AsyncStorage.getItem('bearer_token')
    })
.then(token => console.log('token', token)
1 голос
/ 01 мая 2020

Как следует из названия, AsyncStorage является асинхронным. как установка элемента, так и чтение элемента из AsyncStorage являются асинхронными, поэтому вы не можете сразу прочитать результаты вставки. Согласно документам , для регистрации вы можете

AsyncStorage.setItem('bearer_token', res.data.bearer_token).then(() => {
    AsyncStorage.getItem('bearer_token').then(console.log)
});
1 голос
/ 01 мая 2020

Вы можете использовать async/await с try/catch, что делает его более читабельным. Кроме того, вам потребуется await запрос на AsyncStorage, поскольку он возвращает обещание.

import { AsyncStorage, Alert } from "react-native";
export default async function login(email, password, setLoading) {
  console.log("Loading...");
  setLoading(true);
  const url = "http://52.74.70.6/api/auth/login";
  const data = {
    email: email,
    password: password,
  };
  const headers = {
    Accept: "application/json",
    "Content-Type": "application/json",
  };
  try {
    const response = await axios.post(url, data, { headers: headers });
    setLoading(false);
    await AsyncStorage.setItem("bearer_token", res.data.bearer_token);
    console.log(await AsyncStorage.getItem("bearer_token"));
    console.log("Loading Finished");
  } catch (err) {
    setLoading(false);
    console.log(err);
    AlertErr();
  }
}
...