首页 > 解决方案 > 调用“getAllItems”函数时,React Native Async Storage 总是返回“undefined”

问题描述

我有一个简单的项目计算器应用程序。这些项目使用异步存储进行存储。因此我创建了以下类itemStorage.js

import { AsyncStorage } from 'react-native';

export const saveItem = (item) => {
   AsyncStorage.setItem(item.name, JSON.stringify(item));
}

export const getAllItems = async () => {
    const result = [];
    try {
        await AsyncStorage.getAllKeys().then(async keys => {
            await AsyncStorage.multiGet(keys).then(key => {
                key.forEach(data => {
                    console.log(data)
                    result.push(data)//values
                });
                return result;
            });
        });
    } catch (error) {
        console.log('Error loading settings', error);
    }
}

保存项目有效。当我在 getAllItems 函数中调用console.log(data)时,我还可以看到控制台中的项目。

不起作用的是在其他组件中使用此功能。我有一个名为calculator.js的组件并具有以下代码:

callbackFunction = async (childData) => {
        const myItems = await getAllItems().then(item => {
            console.log("items " + item);
        });

但是“项目”总是未定义的。而且我不知道是什么导致了这种行为。

标签: javascriptreactjsreact-native

解决方案


根据您的代码,您似乎Async/AwaitPromises. 建议您只为您的代码选择一个。

尝试这样的事情,只使用Promises,例如:

const result = [];
AsyncStorage.getAllKeys().then(keys => {
    AsyncStorage.multiGet(keys).then(key => {
        key.forEach(data => {
           console.log(data)
           result.push(data)//values
        });
        return result;
    })
    .catch(error => {
        console.log('Error loading multiGet()', error);
    });
})
.catch(error => {
    console.log('Error loading getAllKeys()', error);
});

推荐阅读