Сохранение данных, если их нет для определенного ключа, использующего AsyncStorage

Я пытаюсь настроить функцию, в которой я сначала проверяю, есть ли у меня значение для определенного ключа, а если нет, я использую библиотеку axios, чтобы получить значение из Интернета и сохранить его как значение этого ключа. вместо. Вот мой код:

async getName() {
    try {
        const value = await AsyncStorage.getItem('dummy'); //the value should be a JSON object
        if (value !== null){
            return value.name;
        }
        else {
            axios.get('https://api.github.com/users/dummy')
                .then(function (response) {
                    console.log(response);
                    try {
                        await AsyncStorage.setItem('dummy', 'dummyval');
                    } catch (error) {
                        console.log(error);
                    }
                    return(response.name);
                })
                .catch(function (error) {
                    console.log('Error fetching name: ' + error.response);
                });
        }
    } catch (error) {
        console.log(error);
    }

Я довольно новичок в React Native, так что я уверен, что это выглядит как беспорядок. Я знаю, что, должно быть, что-то делаю не так, потому что я получаю синтаксическую ошибку при втором использовании await. Кто-нибудь знает, как правильно структурировать эти звонки?

1 ответ

Решение

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

Рассмотрим следующие изменения.

async getName() {
 try {
    const value = await AsyncStorage.getItem('dummy'); //the value should be a JSON object
    if (value !== null){
        return value.name;
    }
    else {
        axios.get('https://api.github.com/users/dummy')
            .then(async function (response) {
                console.log(response);
                try {
                    await AsyncStorage.setItem('dummy', 'dummyval');
                } catch (error) {
                    console.log(error);
                }
                return(response.name);
            })
            .catch(function (error) {
                console.log('Error fetching name: ' + error.response);
            });
    }
 } catch (error) {
    console.log(error);
 }
}

Надеюсь это поможет!

Другие вопросы по тегам