File tree 4 files changed +45
-2
lines changed
main/groovy/org/grails/async/factory/rxjava2
test/groovy/org/grails/async/factory/rxjava2
main/groovy/org/grails/async/factory/rxjava3
test/groovy/org/grails/async/factory/rxjava3
4 files changed +45
-2
lines changed Original file line number Diff line number Diff line change @@ -41,9 +41,10 @@ class RxPromise<T> implements Promise<T> {
41
41
protected boolean finished = false
42
42
43
43
RxPromise (RxPromiseFactory promiseFactory , Closure callable , Scheduler scheduler ) {
44
+
44
45
this (promiseFactory, Single . create( { SingleEmitter<? super T> singleSubscriber ->
45
46
try {
46
- singleSubscriber. onSuccess((T)callable . call( ))
47
+ singleSubscriber. onSuccess((T)runCallable(callable ))
47
48
} catch (Throwable t) {
48
49
singleSubscriber. onError(t)
49
50
}
@@ -158,4 +159,13 @@ class RxPromise<T> implements Promise<T> {
158
159
}
159
160
}
160
161
}
162
+
163
+ static Object runCallable (Closure callable ) {
164
+ Object rtn = callable. call()
165
+ if (rtn == null ) {
166
+ return Void
167
+ } else {
168
+ return rtn
169
+ }
170
+ }
161
171
}
Original file line number Diff line number Diff line change @@ -54,6 +54,18 @@ class RxPromiseSpec extends Specification {
54
54
result == [one : 1 , two : 2 , four : 4 ]
55
55
}
56
56
57
+ void ' Test promise null handling' () {
58
+
59
+ when : ' a null promise result is created'
60
+ def promise = Promises . createPromise {
61
+ return null
62
+ }
63
+ def result = promise. get()
64
+
65
+ then : ' result is void'
66
+ result == Void
67
+ }
68
+
57
69
void ' Test promise list handling' () {
58
70
59
71
when : ' a promise list is created from two promises'
Original file line number Diff line number Diff line change @@ -41,7 +41,7 @@ class RxPromise<T> implements Promise<T> {
41
41
RxPromise (RxPromiseFactory promiseFactory , Closure callable , Scheduler scheduler ) {
42
42
this (promiseFactory, Single . create( { SingleEmitter<? super T> singleSubscriber ->
43
43
try {
44
- singleSubscriber. onSuccess((T)callable . call( ))
44
+ singleSubscriber. onSuccess((T)runCallable(callable ))
45
45
} catch (Throwable t) {
46
46
singleSubscriber. onError(t)
47
47
}
@@ -156,4 +156,13 @@ class RxPromise<T> implements Promise<T> {
156
156
}
157
157
}
158
158
}
159
+
160
+ static Object runCallable (Closure callable ) {
161
+ Object rtn = callable. call()
162
+ if (rtn == null ) {
163
+ return Void
164
+ } else {
165
+ return rtn
166
+ }
167
+ }
159
168
}
Original file line number Diff line number Diff line change @@ -41,6 +41,18 @@ class RxPromiseSpec extends Specification {
41
41
42
42
}
43
43
44
+ void ' Test promise null handling' () {
45
+
46
+ when : ' a null promise result is created'
47
+ def promise = Promises . createPromise {
48
+ return null
49
+ }
50
+ def result = promise. get()
51
+
52
+ then : ' result is void'
53
+ result == Void
54
+ }
55
+
44
56
void ' Test promise map handling' () {
45
57
46
58
when : ' a promise map is created'
You can’t perform that action at this time.
0 commit comments