@@ -38,7 +38,6 @@ public final class Action<Input, Element> {
3838 public let elements : Observable < Element >
3939
4040 /// Whether or not we're currently executing.
41- /// Always observed on MainScheduler.
4241 public let executing : Observable < Bool >
4342
4443 /// Observables returned by the workFactory.
@@ -98,19 +97,18 @@ public final class Action<Input, Element> {
9897 . of ( notEnabledError, underlyingError)
9998 . merge ( )
10099
101- let executionStart = executionObservables
102- let executionEnd = executionObservables
103- . flatMap { observable -> Observable < Void > in
104- return observable
105- . flatMap { _ in Observable< Void> . empty( ) }
106- . concat ( Observable . just ( ) )
107- . catchErrorJustReturn ( )
108- }
100+ executing = executionObservables. flatMap {
101+ execution -> Observable < Bool > in
102+ let execution = execution
103+ . flatMap { _ in Observable< Bool> . empty( ) }
104+ . catchError { _ in Observable . empty ( ) }
109105
110- executing = Observable
111- . of ( executionStart. map { _ in true } , executionEnd. map { _ in false } )
112- . merge ( )
106+ return Observable . concat ( [ Observable . just ( true ) ,
107+ execution,
108+ Observable . just ( false ) ] )
109+ }
113110 . startWith ( false )
111+ . shareReplay ( 1 )
114112
115113 Observable
116114 . combineLatest ( executing, enabledIf) { !$0 && $1 }
@@ -123,7 +121,7 @@ public final class Action<Input, Element> {
123121 defer {
124122 inputs. onNext ( value)
125123 }
126-
124+
127125 let execution = executionObservables
128126 . take ( 1 )
129127 . flatMap { $0 }
0 commit comments