代码之家  ›  专栏  ›  技术社区  ›  dc-p8

如何正确取消请求?

  •  3
  • dc-p8  · 技术社区  · 7 年前

    比方说,我有一个服务,它向我的API发出HTTP请求并返回可观察到的内容——通常情况下。

    我使用该服务,但用户不耐烦,决定使用我的订阅取消该请求。取消订阅()。使用observable甚至有可能取消请求本身。超时()。

    因此,用户将不会收到API的响应,但有可能API仍然收到了他的请求并对其进行了处理,而没有注意到他。

    httpclient中是否有一种方法允许我取消HTTP请求,但要确保服务器在取消后不会收到请求?

    在我的情况下,我有一个post请求,可能需要不确定的时间。我需要能够取消请求,但如果用户取消了请求,请不要处理该请求,这一点非常重要。另一种解决方案是处理请求,但通知用户即使用户取消订阅,服务器也会处理该请求。

    在不使用websockets的情况下有可能获得这种行为吗?

    谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   rmcsharry    7 年前

    httpclient中是否有允许我取消HTTP的方法 请求,但确保服务器不会收到请求 取消之后?

    这个 unsubscribe here .

    但是,由于您说一旦启动请求将需要“不确定的时间”,因此您无法确定服务器在收到取消请求的请求之前是否已经完成了对请求的处理。老实说,如果用户随后出于以下两个原因想要取消请求,我不明白您如何保证百分之百不处理该请求:

    1. 您不知道处理请求需要多长时间
    2. 您不知道用户在请求取消之前会等待多长时间。

    如果(2)发生在服务器已经完成之后,那么您唯一的选择就是建议的替代方案,通知用户它已经处理了请求。

    Websockets也不会为您解决这个问题,因为这是一个计时问题。您可以做的是将请求放入队列中,以便服务器不会立即处理它。然后,您可以在服务器上设置计时器,使其仅在某个固定时间(例如10分钟)后处理队列中的请求。这将允许用户有10分钟的宽限期,在此期间他们可以发送取消请求,然后您将其从队列中删除。