如何从嵌套的 kotlin.js.Promise 创建一个 Promise?
How to create a Promise from the nested kotlin.js.Promise?
kotlin.js.Promise
具有以下声明的函数 then
:
open fun <S> then(
onFulfilled: (T) -> S,
onRejected: (Throwable) -> S = definedExternally
): Promise<S>
我有两个函数 a()
和 b()
。他们都return一个Promise<Int>
。 (它们代表对服务器的一些请求。)我需要将它们组合起来并创建一个新函数,如:
fun c(): Promise<Int> {
a().then({
b()
})
}
但这是不可能的,因为return类型是Promise<Promise<Int>>
而不是Promise<Int>
。
我认为这在 Javascript 中是可能的。我如何在 Kotlin 中链接承诺?
为此你需要一个额外的 Promise
,例如:
fun c(): Promise<Int> {
return Promise({ resolve, reject ->
a().then({
b().then(resolve, reject);
});
})
}
上面的代码也可以通过使用 single-expression function 来简化,如下所示:
fun c() = Promise({ resolve, reject ->
a().then({
b().then(resolve, reject);
});
});
fun c(): Promise<Int> {
return a().then ({
b().unsafeCast<Int>()
//Result of b is Promise<Int>, not Int, but then has bad type declaration
})
}
kotlin.js.Promise
具有以下声明的函数 then
:
open fun <S> then(
onFulfilled: (T) -> S,
onRejected: (Throwable) -> S = definedExternally
): Promise<S>
我有两个函数 a()
和 b()
。他们都return一个Promise<Int>
。 (它们代表对服务器的一些请求。)我需要将它们组合起来并创建一个新函数,如:
fun c(): Promise<Int> {
a().then({
b()
})
}
但这是不可能的,因为return类型是Promise<Promise<Int>>
而不是Promise<Int>
。
我认为这在 Javascript 中是可能的。我如何在 Kotlin 中链接承诺?
为此你需要一个额外的 Promise
,例如:
fun c(): Promise<Int> {
return Promise({ resolve, reject ->
a().then({
b().then(resolve, reject);
});
})
}
上面的代码也可以通过使用 single-expression function 来简化,如下所示:
fun c() = Promise({ resolve, reject ->
a().then({
b().then(resolve, reject);
});
});
fun c(): Promise<Int> {
return a().then ({
b().unsafeCast<Int>()
//Result of b is Promise<Int>, not Int, but then has bad type declaration
})
}