- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有 Rx 运算符或组合来保证每个可观察发射最后执行一些逻辑?
让我们假设以下上下文:
filter()
,用于跳过一些排放doAlways()
的运算符中每次迭代结束时的一些逻辑请参阅下面代码示例中的编号注释
注释:
finalize()
需要序列终止(违反 p.1)iif()
或 switchMap()
内的常规 if
是一个选项,但会使代码更难以阅读用于说明的代码片段: 步骤 (3) 应始终、每次迭代、最后执行,即我们希望始终在 doAlways()
中开始和完成日志 - like 运算符代替 tap()
import { of, interval } from 'rxjs';
import { tap, filter, switchMap } from 'rxjs/operators';
const dataService = { update: (z) => of(z /*posts data to back-end*/) };
const sub = interval(1000).pipe( // <-- (1)
tap(a => console.log('starting', a)),
filter(b => b % 100 === 0), // <-- (2)
switchMap(c => dataService.update(c)),
tap(d => console.log('finishing', d)) // <-- (3) should execute always even (2)
)
.subscribe(x => console.log(x));
最佳答案
不存在这样的运算符,那是因为它不可能存在。一旦你过滤掉了一个值,得到的可观察值就不再发出它了。任何“下游”运营商根本不知道它的存在。
为了说明这一点,您在某些服务中包含了一个 switchMap,这取决于发出的值。由于明显的原因,如果没有要打开的值,则逻辑上无法应用该运算符。
您必须“标记”每个值而不是过滤它,并将过滤器推迟到点击调用之后,但即使如此,切换到另一个可观察的场景也需要更详细的要求。
<小时/>将可观察对象视为您在其上放置元素的传送带。每个运算符(operator)都是一个房间,皮带穿过该房间。在每个房间内, worker 可以决定如何处理每件元素:修改它、拿走它、放入新元素等。但是,每个 worker 只能看到传送带带来的东西 - 他们不知道其他房间带来了什么在他们之前或那里已经做了什么。
为了实现你想要的目标,最后一个房间的 worker 必须了解他从未收到过的元素,这需要他们不具备的额外知识。
关于javascript - RxJs 运算符在每次迭代结束时无条件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54153294/
我想编写一个 SQL 查询,如果没有分配日期时间,我想替换一个可以选择所有日期和时间的字符串。 实际工作原理: SELECT * FROM `entry` WHERE `user` like
表格如下所示: | colA | colB | colC | colD |some other cols ----------------------------- |double|double| i
我有一个 C# 程序经常失败。没关系,我已经创建了程序,它是我的 child ,无论如何我都喜欢它。作为一种支持,我决定围绕它编写一个 AutoHotKey 包装器,它会自动重新启动程序,直到它没有错
我的一位同事向我展示了计算表中记录的数量,以下 View : CREATE VIEW [SPR].[TablesCount] AS SELECT s.name cSchema,
我是一名优秀的程序员,十分优秀!