【问题标题】:scalajs-react: Idiomatic way of processing ajax responsescalajs-react:处理 ajax 响应的惯用方式
【发布时间】:2021-11-24 16:48:14
【问题描述】:

我正在向后端rest服务发送GET请求,如下:

def showAllEmployees =  Callback {
    org.scalajs.dom.ext.Ajax.get(url = "http://localhost:8081/fetchAllEmployees").onComplete {
      case Success(xhr) => {
        Callback.log(xhr.responseText)
      }
      case Failure(t) => println("An error has occurred: " + t.getMessage)
    }
  }

我想从响应中提取记录。我观察到 case Success 中的代码甚至没有被执行。

那么在 scalajs-react 中的惯用方式是什么?

【问题讨论】:

  • 你为什么不直接使用scalajs-react Ajax。它已经返回Callback
  • 我也试过了。我看不出行为有什么变化。 onComplete 中的代码永远不会被调用。

标签: reactjs scala scala.js scalajs-react


【解决方案1】:
  1. 您将 ajax 调用包装到 Callback,这意味着为了执行它 - 您必须调用 .runNow()

  2. Success 响应的情况下,您正在执行 Callback.log(xhr.responseText) 这是需要再次评估的Callback,但是当您在返回UnitonComplete 内部时 - 这是不可能的。所以,ether 做Callback.log(xhr.responseText).runNow() 或者只是使用println

工作示例:

def showAllEmployees =
  Callback {
    org.scalajs.dom.ext.Ajax
      .get(url =
        "https://run.mocky.io/v3/53993bf9-c589-4886-956b-e0b35a1ab13e"
      )
      .onComplete {
        case Success(xhr) =>
          Callback.log(xhr.responseText).runNow()
        case Failure(t) => println("An error has occurred: " + t.getMessage)
      }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-15
    • 2017-02-09
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多