Как создать Promise из вложенного kotlin.js.Promise?
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?
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);
});
});
fun c(): Promise<Int> {
return a().then ({
b().unsafeCast<Int>()
//Result of b is Promise<Int>, not Int, but then has bad type declaration
})
}