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