如何正确取消请求?

时间:2018-04-19 08:34:56

标签: angular api http httpclient observable

让我们说我有一个服务,它向我的API发出HTTP请求并返回observables - 通常情况。

我使用该服务,但用户不耐烦并决定使用my-subscription.unsubscribe()取消该请求。甚至可能使用observable.timeout()来取消请求。

因此,用户不会收到API的回复,但API可能仍会收到他的请求并对其进行处理,而不会注意到他。

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

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

是否可以在不使用websockets的情况下获得此行为?

非常感谢。

1 个答案:

答案 0 :(得分:2)

  

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

unsubscribe方法是取消已经发出的请求的正确方法。更多信息here

但是,既然你说一旦启动请求将需要一段不确定的时间'在收到请求取消请求之前,您无法确定服务器是否已完成处理请求。老实说,如果用户后来因为两个原因想要取消,我真的不知道如何保证100%不处理请求:

  1. 您不知道处理请求需要多长时间
  2. 您不知道用户在要求取消之前会等待多长时间。
  3. 如果(2)在服务器完成后发生,那么您唯一的选择是您建议的替代选项,以通知用户它已经处理了请求。

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