我现在正在学习 RxJs,并且遇到了两个函数,它们是他们的助手库的一部分
Rx.helpers.identity(x)
和
Rx.helpers.noop()
根据 Rx.helpers.identity(x) 的 RxJs Helpers 文档,文档说这是一个函数,它只返回未经修改的传递给它的值。对于 Rx.helpers.noop,他们说这个函数真的什么都不做。
Q:提供这些功能的目的是什么,在什么场景下使用这些功能有用?
我使用身份的常见用例之一是当我必须“解包”来自不同库/API 的可观察对象的内容时,例如:
names$ // Observable<Observable<string>>
.flatMap( Rx.helpers.identity )// Observable<string>
.subscribe( (name: string) => console.log(name) )
在处理函数流时,这些函数变得更加有用,这是 FRP 中相当普遍的做法(redux将是最明显的例子),其中您的操作有效地映射到获取先前状态并返回新状态的函数。
更有趣的是,它noop
可以identity
用于非常相似的目的,具体取决于您的数据是否不可变。
[编辑] 通常你可以observable.flatMap( identity )
用switch
运算符替换,如: observable.switch()
.