React Native AsyncStorage:使用 await 和 async
React Native AsyncStorage: using await and async
我正在尝试从我的 AsyncStorage 数据库中获取所有键,然后在另一个函数中过滤它们,似乎无法让它等到 AsyncStorage 返回数据?
这个函数returns数组中的键:
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
}
在这里尝试了很多,但无法理解它...任何帮助都会很好,谢谢。
你实际上需要 return 来自你的 DATABASE_getAllCoffeeEntries
的东西
你可以这样做。
- 首先,我们将您的调用包装在一个承诺中。如果我们从
AsyncStorage
或 reject
获取所有项目,如果有问题,这将 resolve
。
- 确保我们对
AsyncStorage
的调用在 try/catch
内。 await
调用可能会抛出异常,因此我们需要确保处理任何错误。
- 在从
AsyncStorage
获取项目时使用 async/await
,因为这会利用 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
}
}
我正在尝试从我的 AsyncStorage 数据库中获取所有键,然后在另一个函数中过滤它们,似乎无法让它等到 AsyncStorage 返回数据?
这个函数returns数组中的键:
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
}
在这里尝试了很多,但无法理解它...任何帮助都会很好,谢谢。
你实际上需要 return 来自你的 DATABASE_getAllCoffeeEntries
你可以这样做。
- 首先,我们将您的调用包装在一个承诺中。如果我们从
AsyncStorage
或reject
获取所有项目,如果有问题,这将resolve
。 - 确保我们对
AsyncStorage
的调用在try/catch
内。await
调用可能会抛出异常,因此我们需要确保处理任何错误。 - 在从
AsyncStorage
获取项目时使用async/await
,因为这会利用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
}
}