typescript - rxjs:保持活动订阅除了错误
问题描述
我不太清楚以下行为:
let throw$ = Observable.throw(() => "Server error");
let testClick$ = Observable.fromEvent(this.saveButton.nativeElement, 'click')
.pipe(
switchMap(() => throw$),
finalize(() => console.log("finalize testClick$"))
);
let okClick$ = testClick$.pipe(
catchError(() => Observable.of({})),
finalize(() => console.log("finalize okClick$"))
);
let koClick$ = testClick$.pipe(
catchError((error) => Observable.of(error)),
finalize(() => console.log("finalize koClick$"))
);
okClick$.subscribe();
koClick$.subscribe();
如您所见throw$
,observable 模拟了一个返回错误的 http 请求。
当我单击我的saveButton
时,行为是:
finalize testClick$
finalize okClick$
finalize testClick$
finalize koClick$
问题是订阅不会保持活跃。
我认为使用catchError
, subscription 捕获内部引发的错误会保持活动状态。
关于如何让我的保存点击可观察到的任何想法?
解决方案
行为是正确的。一个链只能发出一个error
通知,使链被释放(并finalize()
调用处理程序)。
如果您想链接重新订阅,您可以使用retry()
将自动重新订阅error
通知的运算符。
testClick$.pipe(
retry(),
);
请注意,finalize()
处理程序将被多次调用。
推荐阅读
- node.js - 多个 API 使用节点 js 生成一个数组/对象
- php - PHP 7.0 到 7.2 更新到 7.4
- c - 在C中将数组转换为矩阵
- javascript - 使用 JS 的无限滚动无法在 Chrome 浏览器上运行 - PURE JS
- php - 如何在 PHP Linux 中访问 .mdb 数据源?
- reactjs - 带有 redux 状态的 useEffect 和 dep 会在 redux 状态发生其他变化时执行
- json - 如何缩进 RSpec 输出 JSON 文件
- javascript - 已解决 - 在循环 JSON 时在 DynamoDB 中存储值
- openstack - Openstack 云中的另一个计算安装出错
- python - 使用 lxml etree iterparse 解析大于 3gb 的 Xml 文件