2

kotlin.js.Promise具有then此声明的功能:

open fun <S> then(
    onFulfilled: (T) -> S, 
    onRejected: (Throwable) -> S = definedExternally
): Promise<S>

我有两个功能a()b(). 他们都返回一个Promise<Int>. (它们代表对服务器的一些请求。)我需要将它们组合并创建一个新函数,例如:

fun c(): Promise<Int> {
    a().then({
        b()
    })
}

但这是不可能的,因为返回类型是Promise<Promise<Int>>而不是Promise<Int>

我认为这在 Javascript 中是可能的。我如何在 Kotlin 中链接 Promise?

4

2 回答 2

2

你需要一个额外Promise的,例如:

fun c(): Promise<Int> {
    return Promise({ resolve, reject ->
        a().then({
            b().then(resolve, reject);
        });
    })
}

上面的代码也可以通过使用如下的单表达式函数来简化:

fun c() = Promise({ resolve, reject ->
    a().then({
        b().then(resolve, reject);
    });
});
于 2017-06-14T12:59:13.993 回答
0
fun c(): Promise<Int> {
    return a().then ({
        b().unsafeCast<Int>() 
        //Result of b is Promise<Int>, not Int, but then has bad type declaration
    })
}
于 2017-06-15T20:39:15.280 回答