@@ -75,6 +75,15 @@ public final class JSPromise: JSBridgedClass {
75
75
return JSPromise ( unsafelyWrapping: jsObject. then!( closure) . object!)
76
76
}
77
77
78
+ /// Schedules the `success` closure to be invoked on successful completion of `self`.
79
+ @discardableResult
80
+ public func then( success: @escaping ( JSValue ) async -> ConvertibleToJSValue ) -> JSPromise {
81
+ let closure = JSOneshotClosure . async {
82
+ return await success ( $0 [ 0 ] ) . jsValue ( )
83
+ }
84
+ return JSPromise ( unsafelyWrapping: jsObject. then!( closure) . object!)
85
+ }
86
+
78
87
/// Schedules the `success` closure to be invoked on successful completion of `self`.
79
88
@discardableResult
80
89
public func then( success: @escaping ( JSValue ) -> ConvertibleToJSValue ,
@@ -88,6 +97,19 @@ public final class JSPromise: JSBridgedClass {
88
97
return JSPromise ( unsafelyWrapping: jsObject. then!( successClosure, failureClosure) . object!)
89
98
}
90
99
100
+ /// Schedules the `success` closure to be invoked on successful completion of `self`.
101
+ @discardableResult
102
+ public func then( success: @escaping ( JSValue ) async -> ConvertibleToJSValue ,
103
+ failure: @escaping ( JSValue ) async -> ConvertibleToJSValue ) -> JSPromise {
104
+ let successClosure = JSOneshotClosure . async {
105
+ return await success ( $0 [ 0 ] ) . jsValue ( )
106
+ }
107
+ let failureClosure = JSOneshotClosure . async {
108
+ return await failure ( $0 [ 0 ] ) . jsValue ( )
109
+ }
110
+ return JSPromise ( unsafelyWrapping: jsObject. then!( successClosure, failureClosure) . object!)
111
+ }
112
+
91
113
/// Schedules the `failure` closure to be invoked on rejected completion of `self`.
92
114
@discardableResult
93
115
public func `catch`( failure: @escaping ( JSValue ) -> ConvertibleToJSValue ) -> JSPromise {
@@ -97,6 +119,15 @@ public final class JSPromise: JSBridgedClass {
97
119
return . init( unsafelyWrapping: jsObject. catch!( closure) . object!)
98
120
}
99
121
122
+ /// Schedules the `failure` closure to be invoked on rejected completion of `self`.
123
+ @discardableResult
124
+ public func `catch`( failure: @escaping ( JSValue ) async -> ConvertibleToJSValue ) -> JSPromise {
125
+ let closure = JSOneshotClosure . async {
126
+ return await failure ( $0 [ 0 ] ) . jsValue ( )
127
+ }
128
+ return . init( unsafelyWrapping: jsObject. catch!( closure) . object!)
129
+ }
130
+
100
131
/// Schedules the `failure` closure to be invoked on either successful or rejected
101
132
/// completion of `self`.
102
133
@discardableResult
0 commit comments