它似乎因底层存储实现而异。
查看的实现AsyncStorage.js
,React Native 依次查找并使用 RocksDB,然后是 SQLite,然后是 AsyncLocalStorage,nad 使用它可以找到的第一个。
我似乎在 React Native 代码库中找不到任何 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) {
最后,从React Native 的实现来看AsyncLocalStorage
,底层实现的最终可能性,似乎它也尽可能地保存了一切,在失败案例发生时存储错误:
for (NSArray<NSString *> *entry in kvPairs) {
NSDictionary *keyError = [self _writeEntry:entry changedManifest:&changedManifest];
RCTAppendError(keyError, &errors);
}