2017-06-14 49 views
2

kotlin.js.Promise具有功能then同意本声明:如何从嵌套的kotlin.js.Promise创建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的承诺?

回答

2

您需要为额外的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); 
    }); 
}); 
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 
    }) 
} 
+0

尽管此代码可以回答这样的问题,为这个问题为什么和/或如何回答这个问题提供了额外的背景来提高它的长期价值。 –