我试图从我的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
}
已经在这里做了很多尝试,但是我无法克服……任何帮助都将是很大的,谢谢。
答案 0 :(得分:1)
您实际上需要从您的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))
}
});
}
的响应。它还可以使您的代码更易于阅读这是重构
try/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
}
}
中,因为它可能会抛出该异常。
res.sendFile()