是否可以从AsyncStorage中删除所有项目

时间:2019-05-06 11:03:52

标签: react-native asyncstorage

我正在测试我的React-Native应用程序,并希望从AsyncStorage中删除所有项目,以便从头开始测试该应用程序。我有些困惑。

我阅读了官方文档,发现了multiRemoveclear函数,但是我不明白如何清除应用程序的所有项目(据我了解,clear会清除整个存储空间所有应用程序中,我恐怕会使用它), 和multiRemove仅删除我在参数中提供的键,但是我想清除所有键。

我想我可以通过getAllKeys键值来做到这一点,并将其一一删除,但是也许有更清晰的方法吗? :)

谢谢

P.S:我试图喜欢这个:

clearAllData() {
    AsyncStorage.multiRemove([]).then(() => alert('success'));
}

但这不起作用...

4 个答案:

答案 0 :(得分:2)

  

我想我可以通过getAllKeys键值将其做到并逐一删除,但是也许有更清晰的方法吗? :)

您应该这样做,这是从应用程序中删除所有键的唯一方法。

这是一种简单的方法:

clearAllData() {
    AsyncStorage.getAllKeys()
        .then(keys => AsyncStorage.multiRemove(keys))
        .then(() => alert('success'));
}

答案 1 :(得分:0)

removeFew = async () => {
  const keys = ['@MyApp_USER_1', '@MyApp_USER_2']
  try {
    await AsyncStorage.multiRemove(keys)
  } catch(e) {
    // remove error
  }
  console.log('Done')
}

答案 2 :(得分:0)

这里有一种使用async / await的方法:

GetHashCode

答案 3 :(得分:0)

当您的应用运行时,它会被分配一个唯一 ID。每个存储的密钥都以 ID 为前缀。因此,您可以识别所有应用的密钥。

使用 AsyncStorage.clear 不会使用唯一标识符,并且会删除所有客户端、应用程序和库的密钥。这在开发中可能没问题,但在生产中可能不受欢迎。

根据@Bruno Soares,multiRemove 是首选。但是,请注意“await”只能在异步函数中使用。将 Bruno 的回答与 @Prawesh Panthi 相结合,以下函数将删除仅与您的应用关联的键,而无需明确标识这些键。

removeAppKeys = async () => {
  let keys = []
  try {
    keys = await AsyncStorage.getAllKeys()
    console.log(`Keys: ${keys}`) // Just to see what's going on
    await AsyncStorage.multiRemove(keys)
  } catch(e) {
   console.log(e)
  }
  console.log('Done')
}