【问题标题】:Abort spray request when aborted from reactjs从reactjs中止时中止喷射请求
【发布时间】:2020-03-04 11:03:02
【问题描述】:

我是 scala 和喷雾的新手。我能够中止来自 reactJS 的请求。并且它在浏览器控制台的网络选项卡中显示请求被取消。但是从 scala 开始,它并没有中止。在日志中我可以看到 api受到打击。对于 Rest API,我在 scala 中使用喷雾。 这是我的 reactJS 代码:

    new Promise((accept, _reject) => {
    fetch("/api/complete", {
      method: "post",
      signal: controller.signal,
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      },
      body: JSON.stringify(requestBody)
    })

这里是我的 scala 代码:

pathPrefix("complete") {
    post {
        entity(as[completeRequest]) { completeRequest =>
            complete {
                    completeService()
            }
        }
    }
}

def completeService(): Future[HttpResponse] = {

    val pipeline: HttpRequest => Future[HttpResponse] = sendReceive ~> unmarshal[HttpResponse]
    val response: Future[HttpResponse] = pipeline(Post(someremoteUrl.concat("complete"), botCompleteRequest)
      ~> addHeader("demo", "test"))
    response
}

那么当它从 reactJS/promise 中止时如何中止这个完整的请求

【问题讨论】:

    标签: scala spray spray-client


    【解决方案1】:

    简短的回答:你不知道。

    客户端是 React(或 Angular,还是 jQuery)并不重要,服务器端是什么(scala、PHP、.NET)并不重要。

    重要的是客户端和服务器之间的HTTP

    在 HTTP 中,您无法“捕获”已发送的请求。 js/browser 中的 abort 函数几乎只意味着它将忽略响应。一旦请求发送并在网络中,它将到达服务器,服务器将处理它。服务器永远不会收到客户端取消请求的通知。

    这个问题和答案很好地涵盖了这个主题:https://softwareengineering.stackexchange.com/questions/362187/can-a-caller-abort-an-execution-of-code-invoked-by-http-request

    【讨论】:

    • @dharmeshsingh 这是akka-streams 的文档,而不是akka-http(以前称为spray)。是的,确实 - 您可以取消流执行,但它与 Future 没有任何共同之处。 Future 创建后无法取消。
    • 我提到 Future[HttpResponse] 的一个问题。然后我将不得不提出 Future[HttpResponse] 的替代方案,但 spray-client 或该管道方法返回 Future[HttpResponse]。因为我必须访问其他服务器才能获得响应,所以我正在使用它
    • 剩下的问题是http请求的取消。您必须向服务器发送另一个 http 请求,告诉服务器您要取消第一个请求。
    • 那么有什么示例可以做到这一点吗?或者一些我可以参考的例子
    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2017-08-19
    相关资源
    最近更新 更多