Реагировать на родной AsyncStorage плохой ответ - PullRequest
0 голосов
/ 07 октября 2019

Создано приложение React Native и необходимо использовать AsyncStorage для использования механизма хранения.

Для сохранения в AsyncStorage используйте код:

  _storeData = async (param) => {
    try {
      let par = JSON.stringify(param);
      //await AsyncStorage.setItem(this.key, par);
      Utilities.setItem(this.key, par);
      this._retrieveData();
    } catch (error) {
      console.log(JSON.stringify(error));
    }
  };

Для извлечения данных:

 _retrieveData = async () => {
    try {      
      const value = Utilities.getItem(this.key);
      if (value !== null) {
        alert('data is new: ' + JSON.stringify(value));
      }
    } catch (error) {
    }
  };

И, чтобы установить setItem и getItem в части Utilities:

const setItem = (key, value) => {
  if (!key || !value) return;
  AsyncStorage.setItem(key, value);
};

const getItem = (key) => {
  if (!key) return;
  var val = AsyncStorage.getItem(key);
  return val;
};

Данные сохраняются, но получаемый ответ не выглядит правильно, так как это строка из "странных" символов:

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

Кто-нибудь знает, почему я получаю такой ответ?

1 Ответ

3 голосов
/ 08 октября 2019

Обратите внимание, что AsyncStorage.getItem также является асинхронным - странные символы представляют обещание, возвращаемое getItem.

Используйте var val = await AsyncStorage.getItem(key); и пометьте свою getItem служебную функцию как async. Вам нужно будет await на любые звонки на Utilities.getItem и Utilities.setItem.

...