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 }