基盤となるストレージの実装によって異なるようです。
の実装を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);
}