Почему использование AsyncStorage.setItem не вызывает сомнений? - PullRequest
0 голосов
/ 01 мая 2018

Я создаю файл GetSetStorage, включающий AsyncStorage, когда я пытаюсь использовать его, я нахожу, что он не работает.

Вот мой GetSetStorage файл:

import { AsyncStorage } from 'react-native';

class GetSetStorage {
  setStorageAsync(key, value) {
    console.log('start set storage');
    console.log(`key =>${key}`);
    console.log(`vaue =>${value}`);
    return new Promise((resolve, reject) => {
      console.log('Why is no working here ?');
      AsyncStorage.setItem(key, value, (error) => {
      console.log(error);
        if (error) {
          console.log('===');
          console.log(`set${key}error${error}`);
          console.log('===');
          reject(`set${key}error${error}`);
        } else {
          console.log('===');
          console.log(`set${key}succeed`);
          console.log('===');
          resolve(true);
        }
      });
    });
  }

  getStorageAsync(key) {
    return new Promise((resolve, reject) => {
      AsyncStorage.getItem(key, (error, result) => {
        console.log(error);
        console.log('where is my error');
        if (error) {
          console.log('===');
          console.log(`load ${key} error ${error}`);
          console.log('===');
          reject(`load ${key} erro ${error}`);
        } else {
          console.log('===');
          console.log(`load ${key} succeed`);
          console.log('===');
          resolve(result);
        }
      });
    });
  }
}

export default new GetSetStorage();

Я использую его в своем компоненте так:

import GetSetStorage from '../storage/GetSetStorage';

  componentWillMount() {
    GetSetStorage.setStorageAsync('testKey', 'test value');
  }

Я вижу свой console.log, я нахожу setItem не работает. Зачем ? enter image description here

Любая помощь будет принята с благодарностью. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Asyncstorage также возвращает обещание, чтобы вы могли сделать что-то вроде

AsyncStorage.setItem('email', JSON.stringify(this.state.UserEmail))
  .then(() => console.log('saved email successfully'))
  .catch(err => console.error('something went wrong', err));

Аналогично, чтобы получить тот же ключ, вы можете сделать что-то вроде:

AsyncStorage.getItem('email')
.then(val => {
  if (val !== null) console.log(val); // You can do whatever you want with the email
})
.catch(err => console.error(err)) // if there was an error fetching data

Обратите внимание, что если в асинхронном хранилище ничего нет, оно вернет 'null', поэтому для обработки ошибок вам нужно поместить их в оператор if, а не в catch

0 голосов
/ 01 мая 2018

// проверить это!

state = {
        UserEmail: 'abcd@gmail.com'
      }

async setValue() {
        await AsyncStorage.setItem('email', JSON.stringify(this.state.UserEmail));
 }



async getValue() {
  try {
       const value = await AsyncStorage.getItem('email');
         if (value !== null) {
            // We have data!!
            console.log(value);
         }
      } catch (error) {
          // Error retrieving data
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...