executeBlock<R> static method
FutureOr<R>
executeBlock<R>(
- FutureOr<
R> block(- Transaction transaction
- Transaction? transaction,
- bool allowExecutingTransaction = true,
Executes block
inside a Transaction and commits it.
- If the parameter
transaction
is provided it will be used as the Transaction instance. - If
allowExecutingTransaction
istrue
(default) andtransaction
is not provided executingTransaction will be used. - If
transaction
is null andallowExecutingTransaction
is false, or no executingTransaction can be found, a new Transaction instance will be created. - See execute.
Implementation
static FutureOr<R> executeBlock<R>(
FutureOr<R> Function(Transaction transaction) block,
{Transaction? transaction,
bool allowExecutingTransaction = true}) {
if (transaction == null && allowExecutingTransaction) {
transaction = executingTransaction;
}
if (transaction != null) {
return block(transaction);
}
transaction = Transaction();
return transaction
._executeImpl(() => block(transaction!))
.resolveMapped((r) {
if (r == null) {
try {
return r as R;
} catch (e, s) {
var abortError =
transaction!.abortError ?? transaction._resolveAbortError(e, s);
var abortStackTrace = abortError.errorStackTrace;
if (abortStackTrace != null) {
Error.throwWithStackTrace(abortError, abortStackTrace);
} else {
throw abortError;
}
}
}
return r;
});
}