react-native - React Native AsyncStorage:使用等待和异步
问题描述
我试图从我的 AsyncStorage 数据库中获取所有密钥,然后在另一个函数中过滤它们,似乎无法让它等到 AsyncStorage 返回数据?
此函数返回数组中的键:
DATABASE_getAllCoffeeEntries = () => {
AsyncStorage.getAllKeys((err, keys) => {})
.then(keys => {
AsyncStorage.multiGet(keys, (error, items) => {
return items;
}).then(items => {
return items; // array of items is returned
});
});
}
这个函数是为了调用上面的函数然后等待结果然后过滤数据。
somefunc = async () => {
var items = await DATABASE_getAllCoffeeEntries();
var someItems = items.filter(function (result, i, item) {
// do filtering stuff
return item;
});
// do something with filtered items
}
在这里尝试了很多,但无法理解它......任何帮助都会很棒,谢谢。
解决方案
你实际上需要从你的DATABASE_getAllCoffeeEntries
你可以做这样的事情。
- 首先,我们将您的电话包装在一个承诺中。
resolve
如果我们从那里得到所有物品AsyncStorage
或者reject
如果有问题,那将是什么。 - 确保我们的调用
AsyncStorage
在try/catch
.await
调用可以抛出,所以我们需要确保我们处理任何错误。 async/await
在从中获取项目时使用,AsyncStorage
因为这可以解决callbacks
捕获来自 的响应的问题AsyncStorage
。它还可以使您的代码更易于阅读
这是重构
DATABASE_getAllCoffeeEntries = () => {
return new Promise( async (resolve, reject) => {
try {
let keys = await AsyncStorage.getAllKeys();
let items = await AsyncStorage.multiGet(keys)
resolve(items)
} catch (error) {
reject(new Error('Error getting items from AsyncStorage: ' + error.message))
}
});
}
然后我们可以像这样调用函数,尽管我们必须将它包装在 atry/catch
中,因为它可以抛出。
somefunc = async () => {
try {
var items = await this.DATABASE_getAllCoffeeEntries();
var someItems = items.filter(function (result, i, item) {
// do filtering stuff
return item;
});
// do something with filtered items
} catch (error) {
// do something with your error
}
}
推荐阅读
- asp.net - 如何使用 asp.net 创建多布局网站?
- c# - 如何使用 2 个开关从内部循环关闭控制台应用程序
- certificate - 在 Nativescript Sidekick 中找不到具有捆绑 ID 的应用程序
- vba - Word-VBA:在特定范围内应用阴影?
- java - 我知道happens-before并不意味着发生在之前,代码“A = B + 1; B = 1;”可以吗?产生结果“A == 2 and B == 1”?
- hyperledger-fabric - 为什么我会随机开始接收现有通道的错误“MSP 错误:通道不存在”Hyperledger Fabric?
- html - 尽管设置了安全策略,但 Google 字体未加载
- database - 如何以实用的方式将自定义数据保存在 sales_flat_creditmemo 表中 Magento 1
- ios - 使用带有 CocoaPods 1.5 的静态库,在导入时没有这样的模块
- c++ - “this”指针只是编译时的东西吗?