AsyncStorage возвращает Promise при получении элемента - PullRequest
1 голос
/ 01 мая 2020

Объяснение

Я пытаюсь использовать AsyncStorage для сохранения токена во время входа в систему. Токен получен из моего бэкэнда в качестве ответа после того, как пользователь нажмет кнопку «Вход». После успешного входа в систему экран переходит к ProfileScreen, где я пытаюсь получить сохраненный токен.

Проблема

Когда я пытаюсь получить элемент в журнале ProfileScreen и в консоли, кажется, что он получен объект Promise, заполненный другими объектами, и внутри я могу видеть свою ценность. Как мне получить стоимость? (или я должен сказать, как выполнить обещание :))

Код

Утилиты / AsyncStorage. js (Здесь у меня есть вспомогательные функции для сохранения и извлечения элемента)

const keys = {
jwtKey: 'jwtKey'
}

const storeItem = async (key, item) => {
  try {
    var jsonOfItem = await AsyncStorage.setItem(key, JSON.stringify(item));
    console.log('Item Stored !');
    return jsonOfItem;
  } catch (error) {
    console.log(error.message);
  }
};

const retrieveItem = async key => {
  try {
    const retrievedItem = await AsyncStorage.getItem(key);
    const item = JSON.parse(retrievedItem);
    console.log('Item Retrieved !');
    return item;
  } catch (error) {
    console.log(error.message);
  }
  return;
};

Экран входа в систему. js (Здесь после нажатия кнопки входа в систему я получаю ответ от моего бэкенда с токеном)

const LoginScreen = ({componentId}) => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const loginPressed = async () => {
    await axios
      .post('localhost', {
        email,
        password,
      })
      .then(function(res) {
        console.log(res);
        storeItem(keys.jwtKey, res.data.token);
        push(componentID, views.profileScreen());
      })
      .catch(function(error) {
        console.log(error);
      });
  };

ProfileScreen. js (На этом экране я пытаюсь получить токен, потому что буду его использовать)

const ProfileScreen = ({componentID}) => {
let testingAsync = retrieveItem(keys.jwtKey);
console.log(testingAsync);

Журнал консоли дает мне объект обещания, заполненный другими объектами.

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

А внутри _55 я могу найти значение токена.

1 Ответ

0 голосов
/ 02 мая 2020

Спасибо за ваши комментарии! Я решил это, используя .then () в моем ProfileScreen, как @Bergi упомянул в своем комментарии. Затем после получения второго комментария я сделал асинхронную функцию & ожидание в моем ProfileScreen внутри useEffect, чтобы предотвратить его повторение, что решило проблему для меня!

...