假设我有一个服务向我的 API 发出 HTTP 请求并返回可观察值 - 通常情况。
我使用该服务,但用户变得不耐烦并决定使用
my-subscription.unsubscribe()
取消该请求。甚至有可能请求会自行取消,使用 observable.timeout()
。
因此用户不会收到API的响应,但API可能仍然收到他的请求并处理它,而没有注意到他。
httpclient中有没有一个方法可以让我取消HTTP请求,但要确保取消后服务器不会收到该请求?
就我而言,我有一个发布请求,可能需要不确定的时间。我需要能够取消请求,但如果用户取消了请求,则不处理该请求非常重要。另一种解决方案是处理请求,但通知用户服务器已处理该请求,即使他取消订阅也是如此。
是否可以在不使用 websockets 的情况下获得此行为?
httpclient 中是否有一个方法可以让我取消 HTTP 请求,但要确保服务器不会收到该请求 取消后?
unsubscribe
方法是取消已发出请求的正确方法。更多信息这里。
但是,既然您说一旦开始,请求将花费“不确定的时间”,您无法确定服务器在收到取消请求的请求之前是否已经完成处理请求。老实说,如果用户随后出于两个原因想要取消,我不明白如何保证 100% 不处理请求:
如果(2)发生在服务器完成之后,那么您唯一的选择就是您建议的替代方案,通知用户它已经处理了请求。
Websockets 也不会为您解决这个问题,因为它是时间问题之一。您可以做的是将请求放入队列中,以便服务器不会立即处理它。然后,您可以在服务器上设置一个计时器,以便它仅在某个固定时间(例如 10 分钟)后处理队列中的请求。这将允许用户有 10 分钟的宽限期,在此期间他们可以发送取消请求,然后您将其从队列中删除。