execute method

  1. @override
void execute (
  1. [TParam param]
)
override

Calls the wrapped handler function with an option input parameter

Implementation

@override
void execute([TParam param]) {
  if (!_canExecute) {
    return;
  }

  if (_isRunning) {
    return;
  } else {
    _isRunning = true;
    _canExecuteSubject.add(false);
  }

  _commandResultsSubject.add(CommandResult<TResult>(
      _emitLastResult ? lastResult : null, null, true));

  try {
    final result = _func(param);
    lastResult = result;
    _commandResultsSubject.add(CommandResult<TResult>(result, null, false));
    _resultsSubject.add(result);
  } catch (error) {
    if (throwExceptions) {
      _resultsSubject.addError(error);
      _commandResultsSubject.addError(error);
      _isExecutingSubject.add(
          false); // Has to be done because in this case no command result is queued
      return;
    }

    _commandResultsSubject.add(CommandResult<TResult>(
        _emitLastResult ? lastResult : null, error, false));
  } finally {
    _isRunning = false;
    _canExecute = !_executionLocked;
    _canExecuteSubject.add(!_executionLocked);
  }
}