Skip to content

Commit d3a9956

Browse files
committed
async JSPromise callbacks
1 parent 059de7c commit d3a9956

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

Sources/JavaScriptKit/BasicObjects/JSPromise.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,15 @@ public final class JSPromise: JSBridgedClass {
7575
return JSPromise(unsafelyWrapping: jsObject.then!(closure).object!)
7676
}
7777

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+
7887
/// Schedules the `success` closure to be invoked on successful completion of `self`.
7988
@discardableResult
8089
public func then(success: @escaping (JSValue) -> ConvertibleToJSValue,
@@ -88,6 +97,19 @@ public final class JSPromise: JSBridgedClass {
8897
return JSPromise(unsafelyWrapping: jsObject.then!(successClosure, failureClosure).object!)
8998
}
9099

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+
91113
/// Schedules the `failure` closure to be invoked on rejected completion of `self`.
92114
@discardableResult
93115
public func `catch`(failure: @escaping (JSValue) -> ConvertibleToJSValue) -> JSPromise {
@@ -97,6 +119,15 @@ public final class JSPromise: JSBridgedClass {
97119
return .init(unsafelyWrapping: jsObject.catch!(closure).object!)
98120
}
99121

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+
100131
/// Schedules the `failure` closure to be invoked on either successful or rejected
101132
/// completion of `self`.
102133
@discardableResult

0 commit comments

Comments
 (0)