如何从嵌套的 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
    })
}