janvladimirmostert
02/14/2021, 5:17 PMclass POST(
val uri: String,
val json: String,
) {
suspend fun <T> submit(): T {
return window.fetch(
input = "${ENV.server}$uri",
init = RequestInit(
body = json,
method = "POST",
headers = json("content-type" to "application/json; charset=UTF-8"),
)
).await().json().await().unsafeCast<T>()
}
}
@JsExport
@ExperimentalJsExport
object Data {
suspend fun getColumns(request: ColumnRequestVO): ColumnResponseVO {
return POST(uri = "/columns", json = request.toString()).submit<ColumnResponseVO>()
}
}
Declaration of such kind (suspend function) cant be exported to JS
Vampire
02/14/2021, 5:26 PMDeferred
that has a toPromise()
function or something like that.janvladimirmostert
02/14/2021, 5:29 PMfun <T> submit(): Promise<T> {
return GlobalScope.async {
window.fetch(
input = "${ENV.server}$uri",
init = RequestInit(
body = json,
method = "POST",
headers = json("content-type" to "application/json; charset=UTF-8"),
)
).await().json().await().unsafeCast<T>()
}.asPromise()
}
that returns a kotlin.js.Promise
which seems to be almost where I want to be, not sure how to await that in TypeScript
Exported declaration uses non-exportable return type: Promise<T>
turansky
02/14/2021, 5:45 PMPromise
- bug.
Issue requiredjanvladimirmostert
02/14/2021, 5:57 PMclass POST(
val uri: String,
val json: String,
) {
suspend fun <T> submit(): T {
return window.fetch(
input = "${ENV.server}$uri",
init = RequestInit(
body = json,
method = "POST",
headers = json("content-type" to "application/json; charset=UTF-8"),
)
).await().json().await().unsafeCast<T>()
}
}
fun getColumns(request: ColumnRequestVO): Promise<ColumnResponseVO> {
return GlobalScope.async {
POST(uri = "/columns", json = request.toString()).submit<ColumnResponseVO>()
}.asPromise()
}
and then on the TS side, I just need to use a callback
export class ColumnSelector extends Renderable {
constructor() {
super();
web.Data.getColumns(vo.ColumnRequestVO.create()).then(e => {
console.log(e)
})
thanks for the help!araqnid
02/14/2021, 9:23 PMGlobalScope.promise { }
instead of GlobalScope.aysnc{ }.asPromise()
, although I think that’s just sugar