如果使用 AsyncStorage 的某个键存在 none,则持久化数据

Persisting data if none exists for a certain key using 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 时不断收到语法错误。有谁知道如何正确构造这些调用?

您需要使用 async 关键字声明 axios 的成功处理程序。在你的代码中,你写成.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);
 }
}

希望对您有所帮助!