【问题标题】:React Native Async Storage always returns 'undefined' when calling 'getAllItems' function调用“getAllItems”函数时,React Native Async Storage 总是返回“未定义”
【发布时间】:2021-05-19 19:15:48
【问题描述】:

我有一个简单的项目计算器应用程序。这些项目使用异步存储进行存储。因此我创建了以下类 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);
        });

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

【问题讨论】:

  • 不要混合使用await 和.then,这只会让事情变得更混乱,而不是需要。由于这种混合,您实际上并没有从您期望的功能中返回。我建议只使用 await/async 并删除 .thens

标签: javascript reactjs react-native


【解决方案1】:

根据您的代码,您似乎将Async/Await 与Promises 混合在一起。建议您只为您的代码选择一个。

尝试这样的事情,只使用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);
});

【讨论】:

  • 感谢您的回复。我已经按照您的建议更改了功能。但是我如何在另一个组件中调用这个函数呢?
  • @j0k3r87 你可以从这个组件中抽象出这个函数并将它放入一个Utils.js 文件中,例如,如果它确实是一个循环函数。如果您采用Promises 路线,则需要将执行包装在new Promise() 符号中并相应地阅读它 - 您还需要执行resolve(result) 而不是return result。这是documentation about it。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 2017-10-31
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多