scalajs-react:处理 ajax 响应的惯用方式

Posted

技术标签:

【中文标题】scalajs-react:处理 ajax 响应的惯用方式【英文标题】:scalajs-react: Idiomatic way of processing ajax response 【发布时间】: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 中的代码永远不会被调用。 【参考方案1】:

    您将 ajax 调用包装到 Callback,这意味着为了执行它 - 您必须调用 .runNow()

    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)
      
  

【讨论】:

以上是关于scalajs-react:处理 ajax 响应的惯用方式的主要内容,如果未能解决你的问题,请参考以下文章

Scalajs-react:未捕获的 TypeError:无法读取 null 的属性(读取“值”)

scalajs-react:如何从状态对象的 Seq 中获得多行文本字段?

如何在 FLUX 中处理 ajax 响应

ajax处理响应

JavaScript 如何在后台处理 AJAX 响应?

如何在 Flux 架构中处理 ajax 请求响应?