2025-01-11 00:25:52 +01:00

54 lines
1.6 KiB
GDScript

## Continues an observable sequence that is terminated normally or
## by an error with the next observable sequence.
## [br][br]
## [b]Examples:[/b]
## [codeblock]
## var res = GDRx.obs.on_error_resume_next([xs, ys, zs])
## [/codeblock]
## [br][br]
## [b]Returns:[/b]
## [br]
## An observable sequence that concatenates the source sequences,
## even if a sequence terminates exceptionally.
static func on_error_resume_next_(sources) -> Observable:
var sources_ : Iterator = GDRx.iter(sources)
var subscribe = func(
observer : ObserverBase,
scheduler : SchedulerBase = null
) -> DisposableBase:
var scheduler_ : SchedulerBase = scheduler if scheduler != null else CurrentThreadScheduler.singleton()
var subscription = SerialDisposable.new()
var cancelable = SerialDisposable.new()
var action = func(
scheduler : SchedulerBase,
state = null,
action_ : Callable = func(__, ___, ____): return
):
var source = sources_.next()
if source is ItEnd:
observer.on_completed()
return
source = source.call() if source is Callable else source
var current : Observable = source
var d = SingleAssignmentDisposable.new()
subscription.disposable = d
var on_resume = func(state = null):
scheduler.schedule(action_.bind(action_), state)
d.disposable = current.subscribe(
observer.on_next, on_resume,
on_resume, scheduler
)
cancelable.disposable = scheduler_.schedule(action.bind(action))
return CompositeDisposable.new([subscription, cancelable])
return Observable.new(subscribe)