54 lines
1.6 KiB
GDScript
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)
|