Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native AsyncStorage-multiSet()是事务性的吗?_React Native_Asyncstorage - Fatal编程技术网

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

React native AsyncStorage-multiSet()是事务性的吗?,react-native,asyncstorage,React Native,Asyncstorage,我有一个应用程序,我计划从服务器中提取一些数据,然后使用异步存储存储这些数据。因此,不需要不断地获取我的数据。 我使用fetch() 但是,如果在AsyncStorage中存储我的一个(大约5个)json对象时出现问题,我不希望存储其中任何一个。以保持数据处于正确的状态。因此,我希望使用事务存储它们 如果存储对象时出现了一些问题,存储失败。例如,如果应用程序已被用户关闭或电池耗尽 在这种情况下会发生什么?我的前两个对象是否可以保存而其他三个对象是否可以不保存?这似乎取决于基础存储实现 查看Rea

我有一个应用程序,我计划从服务器中提取一些数据,然后使用异步存储存储这些数据。因此,不需要不断地获取我的数据。 我使用
fetch()

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

如果存储对象时出现了一些问题,存储失败。例如,如果应用程序已被用户关闭或电池耗尽


在这种情况下会发生什么?我的前两个对象是否可以保存而其他三个对象是否可以不保存?

这似乎取决于基础存储实现

查看React Native查找并使用RocksDB,然后使用SQLite,然后依次使用AsyncLocalStorage,nad使用它能找到的第一个

我似乎在React本机代码库中找不到任何RocksDB实现。但是,查看文档,似乎在使用“TransactionDB或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) {
最后,从底层实现的最终可能性来看,它似乎还保存了它可能保存的所有东西,存储失败案例发生时的错误:

  for (NSArray<NSString *> *entry in kvPairs) {
    NSDictionary *keyError = [self _writeEntry:entry changedManifest:&changedManifest];
    RCTAppendError(keyError, &errors);
  }
for(NSArray*条目以kvPairs为单位){
NSDictionary*keyError=[self\u writeEntry:changedManifest:&changedManifest];
RCTAppendError(键错误和错误);
}