Отменить запрос на распыление при отмене из reactjs - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в 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
}

Итак, как прервать этот полный запрос, когда он прерывается в реакцииJS / обещание

1 Ответ

0 голосов
/ 04 марта 2020

Краткий ответ: Вы этого не сделаете.

Это имеет значение, если это React (или Angular, или jQuery) на стороне клиента, и не имеет значения, что находится на сервере сторона (scala, PHP,. NET).

Имеет значение HTTP между клиентом и сервером.

В HTTP вы не можете «перехватить» уже отправленный запрос. Функция abort в js / browser в значительной степени означает, что она игнорирует ответ. Как только запрос отправлен и находится в сети, он попадет на сервер, и сервер обработает его. Сервер никогда не получает уведомление о том, что клиент отменил запрос.

Этот вопрос и ответ достаточно хорошо охватывают топи c: https://softwareengineering.stackexchange.com/questions/362187/can-a-caller-abort-an-execution-of-code-invoked-by-http-request

...