React Native AsyncStorage:使用await和async

时间:2019-02-08 05:52:51

标签: react-native asynchronous async-await 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 
}

已经在这里做了很多尝试,但是我无法克服……任何帮助都将是很大的,谢谢。

1 个答案:

答案 0 :(得分:1)

您实际上需要从您的DATABASE_getAllCoffeeEntries返回一些信息

您可以执行以下操作。

  1. 首先,我们将您的电话包裹在一个诺言中。如果我们从resolveAsyncStorage获得所有商品,如果有问题,该商品将为reject
  2. 请确保我们对AsyncStorage的调用在try/catch内部。 await调用可能会抛出,因此我们需要确保处理所有错误。
  3. 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()