angular - 只能取消第一次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
解决方案
一旦你调用complete()
了一个 observable,流就关闭了。它无法再次启动。因此,当您尝试this.unsubscribe.next(true);
再次发送时,没有打开流来发送请求。
要保留流并仍然使用它来取消 HTTP 请求,请删除this.unsubscribe.complete();
. 只要打电话this.unsubscribe.next(true);
。
我已经修改了您的Stackblitz。
在不相关的说明中,我认为这仅用于演示目的。如果您确实希望将 HTTP 调用绑定到按钮,最好click
通过 RxJSfrom
函数与switchMap
或exhauseMap
操作符(根据要求)绑定到控制器中的事件以触发调用。这样您就可以确保避免潜在的多个并发调用。
推荐阅读
- chatbot - Dialogflow 使用 Rest api 访问代理历史记录
- javascript - SharePoint JavaScript 读取富文本多行字段的值
- python - 如何在填充缺失日期的同时反向融化分类变量列?熊猫
- node.js - 为什么当余数 4.677 减去 0.001 结果是 4.67599?
- ios - 从另一个没有情节提要的类或方法访问 TextField
- android - 如何从我的证书中受益以进行更新
- c++ - QWidget closeEvent(...) 没有被 QProcess::terminate() 调用
- syntax - ocaml:多个参数函数的基本语法
- c# - c# 中的金雅拓第三方 dll 引用
- java - 如何从 Java 查询 LDAP 以从 Active Directory 的“netbiosDomain\samAccountName”获取对象的 DN