readTransaction<R> method

Future<Result<R, DbError>> readTransaction<R>(
  1. Future<Result<R, DbError>> body(
    1. ReadTransaction tx
    ), {
  2. Duration idleTimeout = BeginRequest.defaultIdleTimeout,
})

Runs body against one consistent read-only snapshot; writes committed meanwhile are not seen. The snapshot is released when body ends.

Implementation

Future<Result<R, DbError>> readTransaction<R>(
  Future<Result<R, DbError>> Function(ReadTransaction tx) body, {
  Duration idleTimeout = BeginRequest.defaultIdleTimeout,
}) => _guarded(() async {
  final begun = await _send(
    BeginRequest(TransactionMode.read, idleTimeout: idleTimeout),
  );

  return begun.when(
    ok: (id) => ReadTransaction._(this, id)._complete(body),
    err: (error) async => Err(error),
  );
});