让我们说我有一个服务,它向我的API发出HTTP请求并返回observables - 通常情况。
我使用该服务,但用户不耐烦并决定使用my-subscription.unsubscribe()取消该请求。甚至可能使用observable.timeout()来取消请求。
因此,用户不会收到API的回复,但API可能仍会收到他的请求并对其进行处理,而不会注意到他。
httpclient中是否有一个允许我取消HTTP请求的方法,但确保服务器在取消后不会收到请求?
在我的情况下,我有一个帖子请求,可能需要不确定的时间。我需要能够取消请求但是如果用户取消请求则不处理请求非常重要。另一种解决方案是处理请求,但通知用户服务器即使取消订阅也会对其进行处理。
是否可以在不使用websockets的情况下获得此行为?
非常感谢。
答案 0 :(得分:2)
httpclient中是否有一个允许我取消HTTP的方法 请求,但确保服务器不会收到请求 取消后?
unsubscribe
方法是取消已经发出的请求的正确方法。更多信息here。
但是,既然你说一旦启动请求将需要一段不确定的时间'在收到请求取消请求之前,您无法确定服务器是否已完成处理请求。老实说,如果用户后来因为两个原因想要取消,我真的不知道如何保证100%不处理请求:
如果(2)在服务器完成后发生,那么您唯一的选择是您建议的替代选项,以通知用户它已经处理了请求。
Websockets也不会为你解决这个问题,因为它是时间问题之一。您可以做的是将请求放入队列,以便服务器不会立即处理它。然后,您可以在服务器上设置计时器,使其仅在某个固定时间(例如10分钟)之后处理队列中的请求。这将允许用户在10分钟的宽限期内发送取消请求,然后将其从队列中删除。