【问题标题】:Waiting on fetch() in Kotlin JS?在 Kotlin JS 中等待 fetch()?
【发布时间】:2020-09-06 14:01:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript kotlin kotlin-js


    【解决方案1】:

    我不确定fetch(),但 Ktor 带有一个多平台 HTTP 库,您可以立即使用它。你可以找到它here

    此类调用的示例如下所示:

    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()
    }
    

    【讨论】:

      【解决方案2】:

      如果你想使用 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))}
      

      肯定还有其他选择。如果这不适合你,请告诉我。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-06
        • 2017-12-26
        • 1970-01-01
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多