2

我正在用 Kotlin JS 编写一个 WebGL 应用程序,因此我需要获取资源,例如 .obj 文件和着色器。我想通过 HTTP 请求来做到这一点,但我遇到了问题。

我目前正在尝试通过 JS 的fetch()API 来做到这一点。问题是这显然是异步的,并且需要在渲染循环开始之前完成获取资源(即获取资源是初始化)。

我真的很难让它同步工作。也就是说,我的程序在获取着色器和 .obj 文件之前不应继续加载缓冲区和主绘制循环。我怎样才能让它在 Kotlin JS 中工作?是fetch()不是这样做的正确方法?

4

2 回答 2

1

我不确定,fetch()但 Ktor 带有一个多平台 HTTP 库,您可以开箱即用。你可以在这里找到它。

这种调用的示例如下所示:

suspend fun sequentialRequests() {
    val client = HttpClient()

    // Get the content of an URL.
    val firstBytes = client.get<ByteArray>("https://127.0.0.1:8080/a")

    // Once the previous request is done, get the content of an URL.
    val secondBytes = client.get<ByteArray>("https://127.0.0.1:8080/b")

    client.close()
}
于 2020-07-05T19:02:40.633 回答
0

如果你想使用 fetch,你可以这样做。

import kotlinx.browser.window
import kotlinx.coroutines.*
import kotlin.js.Promise

    suspend fun main() {
        val promise = Promise.resolve(window.fetch("https://jsonplaceholder.typicode.com/todos/1").then {response->
            response.json()
        }.then {
            it
        }).await()
    
        console.log(JSON.stringify(promise))}

肯定还有其他选择。让我知道这是否不适合您。

祝你好运!

于 2020-09-06T06:01:19.823 回答