Как создать 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
    })
}
Другие вопросы по тегам