#http-get #kotlin-js
#http-get #kotlin-js
Вопрос:
Я совершенно новичок в KotlinJs и хотел проверить его потенциал в разработке сервисов без сервера.
Я решил начать с вызова внешнего API с помощью метода HTTP GET, используя XMLHttpRequest()
предложенный в документации KotlinJs. Однако я не могу придумать какой-либо способ его использования без dynamic
механизма.
fun main(args: Array<String>) {
val url = "https://jsonplaceholder.typicode.com/todos/1"
var xhttp: dynamic = XMLHttpRequest()
xhttp.open("GET", url, true)
xhttp.onreadystatechange = fun() {
if (xhttp.readyState == 4) {
println(xhttp.responseJson)
}
}
xhttp.send()
}
Конечно, этот пример работает отлично, но я чувствую, что это должен быть лучший способ сделать это, не отключая средство проверки типов Kotlin.
- Есть ли какой-либо способ сделать это, используя только KotlinJs (без динамического)?
- Если это невозможно, может кто-нибудь хотя бы объяснить, почему?
Ответ №1:
Я нашел способ не использовать dynamic с обратными вызовами, как в classic .js
private fun getData(input: String, callback: (String) -> Unit) {
val url = "https://jsonplaceholder.typicode.com/todos/$input"
val xmlHttp = XMLHttpRequest()
xmlHttp.open("GET", url)
xmlHttp.onload = {
if (xmlHttp.readyState == 4.toShort() amp;amp; xmlHttp.status == 200.toShort()) {
callback.invoke(xmlHttp.responseText)
}
}
xmlHttp.send()
}
и чем просто вызвать его:
getData("1") {
response -> println(response)
}
Надеюсь, это поможет кому-то в будущем.
Комментарии:
1. Почему бы вам просто не использовать fetch api? вы можете определить его с помощью ключевого слова external
2. На самом деле это тоже хорошая идея, однако в то время я использовал этот язык в общей сложности несколько часов. Спасибо за предложение другого решения;)
3. конечно, если вам нужна помощь в определении fetch api, я могу записать это для вас