如何从嵌套的kotlin.js.Promise创建一个Promise?

kotlin.js.Promise具有这个声明的功能:

 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 ,例如:

 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); }); }); 
 fun c(): Promise<Int> { return a().then ({ b().unsafeCast<Int>() //Result of b is Promise<Int>, not Int, but then has bad type declaration }) } 
Interesting Posts