123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package rx
- const invalid_no_except = "An effect that assumed to be a no-exception effect has thrown an error"
- func Throw(e Object) Observable {
- return Observable { func(_ Scheduler, ob *observer) {
- ob.error(e)
- } }
- }
- func (e Observable) NoExcept() Observable {
- return Observable { func(sched Scheduler, ob *observer) {
- sched.run(e, &observer {
- context: ob.context,
- next: ob.next,
- error: func(_ Object) {
- panic(invalid_no_except)
- },
- complete: ob.complete,
- })
- } }
- }
- func (e Observable) Catch(f func(Object) Observable) Observable {
- return Observable { func(sched Scheduler, ob *observer) {
- sched.run(e, &observer {
- context: ob.context,
- next: func(x Object) {
- ob.next(x)
- },
- error: func(e Object) {
- var caught_effect = f(e)
- sched.run(caught_effect, ob)
- },
- complete: func() {
- ob.complete()
- },
- })
- } }
- }
- func (e Observable) CatchComplete(f func(Object) Observable) Observable {
- return Observable { func(sched Scheduler, ob *observer) {
- var handler_ob = &observer {
- context: background,
- next: func(Object) {},
- error: func(Object) {},
- complete: func() {},
- }
- sched.run(e, &observer {
- context: ob.context,
- next: func(x Object) {
- ob.next(x)
- },
- error: func(e Object) {
- var handler = f(e)
- sched.run(handler, handler_ob)
- ob.complete()
- },
- complete: func() {
- ob.complete()
- },
- })
- } }
- }
- func (e Observable) CatchRetry(f func(Object) Observable) Observable {
- var try Observable
- try = Observable { func(sched Scheduler, ob *observer) {
- sched.run(e, &observer {
- context: ob.context,
- next: func(x Object) {
- ob.next(x)
- },
- error: func(e Object) {
- var caught_effect =
- f(e).NoExcept().Then(func(retry Object) Observable {
- if retry.(bool) {
- return try
- } else {
- return Throw(e)
- }
- })
- sched.run(caught_effect, ob)
- },
- complete: func() {
- ob.complete()
- },
- })
- } }
- return try
- }
- func (e Observable) CatchThrow(error_mapper func(Object)Object) Observable {
- return Observable { func(sched Scheduler, ob *observer) {
- sched.run(e, &observer {
- context: ob.context,
- next: ob.next,
- error: func(err Object) {
- ob.error(error_mapper(err))
- },
- complete: ob.complete,
- })
- } }
- }
|