From e32611d2f28e045eab17f90a309d862e5e6ffc72 Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Mon, 20 Mar 2023 17:28:18 +0100 Subject: [PATCH] [Wasm] Make Promise methods generic instead of using Dynamic Copy full Promise implementation from Kotlin/JS, and specify JsAny? upper bounds --- .../stdlib/wasm/src/kotlin/js/Promise.kt | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/libraries/stdlib/wasm/src/kotlin/js/Promise.kt b/libraries/stdlib/wasm/src/kotlin/js/Promise.kt index 27a83e52e2a..eb74790a5a1 100644 --- a/libraries/stdlib/wasm/src/kotlin/js/Promise.kt +++ b/libraries/stdlib/wasm/src/kotlin/js/Promise.kt @@ -5,20 +5,26 @@ package kotlin.js +import kotlin.internal.LowPriorityInOverloadResolution + /** * Exposes the JavaScript [Promise object](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise) to Kotlin. */ -public external class Promise(executor: (resolve: (Dynamic?) -> Unit, reject: (Dynamic) -> Unit) -> Unit) : JsAny { - public fun then(onFulfilled: (Dynamic?) -> Dynamic?): Promise - public fun then(onFulfilled: (Dynamic?) -> Dynamic?, onRejected: (Dynamic) -> Dynamic?): Promise - public fun catch(onRejected: (Dynamic) -> Dynamic?): Promise - public fun finally(onFinally: () -> Unit): Promise +public external class Promise(executor: (resolve: (T) -> Unit, reject: (JsAny) -> Unit) -> Unit) : JsAny { + @LowPriorityInOverloadResolution + public fun then(onFulfilled: ((T) -> S)?): Promise - public companion object { - public fun reject(e: Dynamic): Promise - public fun resolve(e: Dynamic): Promise - public fun resolve(e: Promise): Promise + @LowPriorityInOverloadResolution + public fun then(onFulfilled: ((T) -> S)?, onRejected: ((JsAny) -> S)?): Promise + + public fun catch(onRejected: (JsAny) -> S): Promise + public fun finally(onFinally: () -> Unit): Promise + + companion object { + public fun all(promise: JsArray>): Promise> + public fun race(promise: JsArray>): Promise + public fun reject(e: JsAny): Promise + public fun resolve(e: S): Promise + public fun resolve(e: Promise): Promise } -} - - +} \ No newline at end of file