AsyncStorage - multiSet() 是事务性的吗?

AsyncStorage - Is multiSet() transactional?

我有一个应用程序,我计划从我的服务器中提取一些数据,然后使用 AsyncStorage 存储这些数据。所以不需要不断地获取我的数据。 我使用 fetch() 获取几个 json,然后使用 AsyncStore.multiSet() 存储它们。

但是,如果在 AsyncStorage 中存储我的大约 5 个 json 对象之一时出现问题,我不想存储其中任何一个。使数据保持正确状态。因此,我想使用事务来存储它们。

那么如果在存储我的对象的过程中出现一些问题并且存储失败会发生什么。例如,如果应用程序被用户关闭或者他们的电池电量耗尽。

在那种情况下会发生什么?我的前 2 个对象可以保存而其他 3 个不可以保存吗?

它似乎因底层存储实现而异。

查看 the implementation of AsyncStorage.js,React Native 依次查找并使用 RocksDB、SQLite、AsyncLocalStorage,nad 使用它能找到的第一个。

我似乎无法在 React Native 代码库中找到任何 RocksDB 实现。但是,查看文档,似乎使用 'TransactionDB or OptimisticTransactionDB':

时支持事务
https://github.com/facebook/rocksdb/wiki/Transactions

如果 SQLite 是底层实现:

https://github.com/facebook/react-native/blob/235b16d93287061a09c4624e612b5dc4f960ce47/ReactAndroid/src/main/java/com/facebook/react/modules/storage/AsyncStorageModule.java#L147

它看起来好像在尽力保存它可能保存的所有内容:

  /** 
   * Inserts multiple (key, value) pairs. If one or more of the pairs cannot be inserted, this will
   * return AsyncLocalStorageFailure, but all other pairs will have been inserted.
   * The insertion will replace conflicting (key, value) pairs.
    */
  @ReactMethod
  public void multiSet(final ReadableArray keyValueArray, final Callback callback) {

最后,从the React Native implementation of AsyncLocalStorage来看,底层实现的最终可能性,貌似也存了能存的,把失败的case发生的error都存起来了:

  for (NSArray<NSString *> *entry in kvPairs) {
    NSDictionary *keyError = [self _writeEntry:entry changedManifest:&changedManifest];
    RCTAppendError(keyError, &errors);
  }