首页 > 解决方案 > 只能取消第一次HTTP请求

问题描述

运行 Angular 9 和 rxjs 6。我有一个奇怪的问题,可能是由 引起的takeUntil(),但我不确定。我需要能够启动/取消请求(不是暂停,而是实际取消它)。这就是我告诉浏览器停止请求的方式:

this.unsubscribe.next(true);
this.unsubscribe.complete();

您可以通过将浏览器油门设置为慢速 3G 并访问此站点来测试它:https ://stackblitz.com/edit/angular-ivy-kazpey

请注意按下开始时的 GET 请求。如果按取消,它将取消请求。如果您然后再次单击开始,它将启动 GET 请求,但您无法取消它。这是为什么?

这是一个可能更容易理解的视频示例:https ://i.imgur.com/MT7YqEX.gifv

标签: angulartypescriptrxjs

解决方案


一旦你调用complete()了一个 observable,流就关闭了。它无法再次启动。因此,当您尝试this.unsubscribe.next(true);再次发送时,没有打开流来发送请求。

要保留流并仍然使用它来取消 HTTP 请求,请删除this.unsubscribe.complete();. 只要打电话this.unsubscribe.next(true);

我已经修改了您的Stackblitz


在不相关的说明中,我认为这仅用于演示目的。如果您确实希望将 HTTP 调用绑定到按钮,最好click通过 RxJSfrom函数与switchMapexhauseMap操作符(根据要求)绑定到控制器中的事件以触发调用。这样您就可以确保避免潜在的多个并发调用。


推荐阅读