diff --git a/Sources/Action/Action.swift b/Sources/Action/Action.swift index 82511e28..8d0b50fe 100644 --- a/Sources/Action/Action.swift +++ b/Sources/Action/Action.swift @@ -38,7 +38,6 @@ public final class Action { public let elements: Observable /// Whether or not we're currently executing. - /// Always observed on MainScheduler. public let executing: Observable /// Observables returned by the workFactory. @@ -98,19 +97,18 @@ public final class Action { .of(notEnabledError, underlyingError) .merge() - let executionStart = executionObservables - let executionEnd = executionObservables - .flatMap { observable -> Observable in - return observable - .flatMap { _ in Observable.empty() } - .concat(Observable.just()) - .catchErrorJustReturn() - } + executing = executionObservables.flatMap { + execution -> Observable in + let execution = execution + .flatMap { _ in Observable.empty() } + .catchError { _ in Observable.empty()} - executing = Observable - .of(executionStart.map { _ in true }, executionEnd.map { _ in false }) - .merge() + return Observable.concat([Observable.just(true), + execution, + Observable.just(false)]) + } .startWith(false) + .shareReplay(1) Observable .combineLatest(executing, enabledIf) { !$0 && $1 } @@ -123,7 +121,7 @@ public final class Action { defer { inputs.onNext(value) } - + let execution = executionObservables .take(1) .flatMap { $0 }