GetItem с AsyncStorage в React Native не работает - PullRequest
1 голос
/ 17 мая 2019

Я новичок в реагировании на натив, и получение значения привязки по индексу 1 равно нулю, когда я пытаюсь получить данные из AsyncStorage, в приведенном ниже коде реакции - мой код.

Alert.alert(
        'Info',
        'React AsyncStorage',
        [
            {text: 'Get Data',onPress: () => this.getValue('name'),},
            {text: 'Save Data', onPress: () => this.saveValue('name', 'abc'),}
        ],
        {cancelable: false},
        );


async saveValue(key:String, value:bool) {
     AsyncStorage.setItem(key, value);
     Alert.alert('Data', 'saving');         
}
async getValue(key) {         
    // try {
    //     await AsyncStorage.getItem(Constant.SHOW_INTRO).then((value) =>
    //         console.log(`AsyncStorage GET for Constant.SHOW_INTRO: "${value}"`));

    // } catch (error) {
    //     Alert.alert('Error', 'Error retrieving data');
    // }

    try {
        const value = await AsyncStorage.getItem(key)
        console.log(`AsyncStorage GET for "${key}": "${value}"`);
    } catch (error) {
        Alert.alert('Error', 'Error retrieving data');
    }
}

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы можете использовать этот формат:

setData = (value) => {
    // if value is an Object use this: value = JSON.stringify(value)
    // if value is a number use this: value = value.toString()
    AsyncStorage.setItem('myKey', value, () => {
        console.warn('Done!')
    })
}

getData = () => {
    AsyncStorage.getItem('myKey').then(storage => {
        console.warn(storage)
    }).catch(e => console.warn(e))
}

Тогда:

this.setData('sample text') 

Edit:

AsyncStorage занимает некоторое время для извлечения данных, поэтому возвращает обещание, пока значение не станет доступным. Вы должны вызвать функцию then() и получить значение оттуда. Все, что находится внутри функции then(), вызывается после извлечения значения из хранилища.

0 голосов
/ 17 мая 2019

Попробуйте сделать это так:

async getValue(key){
  try {
    const value = await AsyncStorage.getItem(key)
    console.log(`AsyncStorage GET for "${key}": "${value}"`);
  } catch (error) {
    Alert.alert('Error', 'Error to retrieve data');
  }
}
...