2017-06-14 77 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

儘管此代碼可以回答這樣的問題,爲這個問題爲什麼和/或如何回答這個問題提供了額外的背景來提高它的長期價值。 –