javascript - 调用“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);
});
但是“项目”总是未定义的。而且我不知道是什么导致了这种行为。
解决方案
根据您的代码,您似乎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);
});
推荐阅读
- macos - 如何使用 SwiftUI 在 macOS 上创建状态栏图标?
- azure - Azure VNet 和地址空间
- algorithm - 快速排序运行时间
- spring-boot - org.apache.http.NoHttpResponseException 导致的Zuul Forwarding Exception: 目标服务器响应失败
- javascript - 动态生成的 DOM 元素在表单提交后立即消失
- apache-kafka - 从 GitLab 流式构建和测试日志
- node.js - Multer get 和 post path 获取语法错误显示图像
- c++ - C++如何使用静态映射成员
- r - 从 r 中的向量生成列表
- javascript - 如何在 mxgraph javascript 库中制作父 mxcell