我想从我的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))
}
});
}
然后我们可以这样调用该函数,但我们必须把它包在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
}
}