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(键错误和错误);
}